我有一个很大的列表列表,我正在转换为一个numpy数组,然后迭代,像这样:
a = [ [0,1,2], [3,4,5], [6,7,8] ]
np_a = np.array(a)
for i in np_a:
print i # prints [0,1,2], then [3,4,5], then [6,7,8] as expected
# do a bunch of stuff to each row
当然这有效,但由于我正在处理大量数据,这可能需要一分钟才能运行。我一直在研究加速这段代码的各种方法,首要的建议是对我在循环中执行的操作进行矢量化。然而,这些操作对于矢量化并不是一件容易的事情(想想一堆点积和变换等等在每一行......)。我发现的一种方法是使用np.nditer方法,如下所示:
a = [ [0,1,2], [3,4,5], [6,7,8] ]
np_a = np.array(a)
for i in np.nditer(np_a):
print i # prints 0, then 1, then 2, etc...
# do a bunch of stuff to each rowon
但这似乎将阵列变为一维列表。我已经非常广泛地查看了文档,并且没有找到我在这里寻找的内容:https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.nditer.html#iterating-as-a-specific-data-type
有没有人有任何关于如何使这项工作的具体建议,正如我期望的那样,使用np.nditer,或者某种其他实现方式比“方法中的r”更有效?