【发布时间】:2018-07-23 19:54:58
【问题描述】:
我需要给定三个定义切片条件的值 (N1, N2, N3) 对数组 (aa) 进行切片,如下所示:
import numpy as np
N1, N2, N3 = 200, 500000, 30
aa = np.random.uniform(0., 1., N1*N2)
bb = []
for i in range(N1):
bb += list(aa[i * N2:(i * N2) + N3])
此代码按照规则生成一个新数组bb:
-
aa的第一个N3元素 - 跳转
N2元素并添加N3的以下aa元素 - 重复 2. 直到
aa用完
我可以通过 numpy 索引更快地执行此过程吗?
【问题讨论】:
-
你为什么在这里使用
list(…)而不是直接使用aa[i * N2:(i * N2) + N3]?切片非常有效——你可以用 numpy 让它稍微simpler,但不会更快。但是将每个切片转换为列表非常慢,并且 numpy 不会做任何事情来加快速度。 -
你的意思是跳转N2-N3个元素?
-
@abarnert 对不起,“直接使用
aa[]”是什么意思?我使用 list 将此块添加到最终的bb数组中。如果我不这样做,我只会添加元素,而不是扩展列表。 -
@Gabriel 为什么你希望最终结果是一个列表?为什么不让它成为一个数组链,或者一个跨步数组?
-
我不知道,这就是我发现的连接元素块的方式。