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中,我将使用理解。