Python 以任意长度重复数组
是否可以创建一个如下所示的数组Python 以任意长度重复数组,python,numpy,repeat,Python,Numpy,Repeat,是否可以创建一个如下所示的数组 0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1 开头有以下数组 4, 3, 5, 2 在Python/Numpy中不使用循环 编辑: 这只是一个示例,信息(4,3,5,2)可能有任何长度或数字。您可以不为或编写,而在时编写,但我向您保证,在下面的某个地方有一个循环 >>> from itertools import chain, imap >>> list(chain.from_iterab
0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1
开头有以下数组
4, 3, 5, 2
在Python/Numpy中不使用循环
编辑:
这只是一个示例,信息(4,3,5,2)可能有任何长度或数字。您可以不为或编写
,而在
时编写,但我向您保证,在下面的某个地方有一个循环
>>> from itertools import chain, imap
>>> list(chain.from_iterable(imap(xrange, (4, 3, 5, 2))))
[0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1]
你可以不用为
写,或者在
的时候写,但是我向你保证,在那里的某个地方有一个循环
>>> from itertools import chain, imap
>>> list(chain.from_iterable(imap(xrange, (4, 3, 5, 2))))
[0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1]
当然,这是作弊,因为map
是一个伪装的循环。没有更直接的惯用语了,好吧
上面创建了len(长度)
temporaries。另一种不构建这些临时表的方法是使用iter的和@jornsharpe答案的改编版本:
>>> from itertools import chain, imap
>>> np.fromiter(chain.from_iterable(imap(xrange, lengths)), dtype=int,
... count=np.sum(lengths))
array([0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1])
有些令人惊讶的是,fromiter的习惯用法速度更快,如果不先计算计数,它会更快:
(运行Linux的x86-64上NumPy 1.8.1和Python 2.7.6的计时。)
当然,这是作弊,因为map
是一个伪装的循环。没有更直接的惯用语了,好吧
上面创建了len(长度)
temporaries。另一种不构建这些临时表的方法是使用iter的和@jornsharpe答案的改编版本:
>>> from itertools import chain, imap
>>> np.fromiter(chain.from_iterable(imap(xrange, lengths)), dtype=int,
... count=np.sum(lengths))
array([0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 3, 4, 0, 1])
有些令人惊讶的是,fromiter的习惯用法速度更快,如果不先计算计数,它会更快:
(运行Linux的x86-64上的NumPy 1.8.1和Python 2.7.6的计时。)有趣的解决方案,但我正在寻找纯NumPy解决方案@塞巴斯蒂安:这可能是值得一提的信息。如果你只想要numpy,为什么你会要求python/numpy解决方案?对不起,也许“pure”在这里是个错误的词,但是有numpy函数的东西…@larsmans非常整洁,虽然如果有任何问题,它似乎比直接将我的列表
传递给一个新的np.array
要慢!有趣的解决方案,但我正在寻找纯numpy解决方案@塞巴斯蒂安:这可能是值得一提的信息。如果你只想要numpy,为什么你会要求python/numpy解决方案?对不起,也许“pure”在这里是个错误的词,但是有numpy函数的东西…@larsmans非常整洁,虽然如果有任何问题,它似乎比直接将我的列表
传递给一个新的np.array
要慢@larsmans-有什么理由使用map
而不是(在我看来)更简单的np.concatenate([np.arange(k)表示长度为k])
?@mtrw:因为不允许循环:)我也很喜欢map
的简洁性。但是在Python3中,我会使用理解。@larsmans-任何使用map
的理由,而不是(在我看来)更简单的np.concatenate([np.arange(k)表示k的长度])
?@mtrw:因为不允许循环:),我也很喜欢map
的简洁性。但在Python3中,我将使用理解。