我在python中有一个三维的ndarray,并且希望以元素方式沿着三个边距中的两个对其进行迭代。在
更确切地说,例如,我希望迭代所有(x,y)对,但将z数据作为一个数组保存在一起。在
作为伪代码,我最终想要的表达式应该是这样的
[ f(z) for z in all_xy_pairs(the_ndarray) if g(z) == True ]
我考虑使用“重塑”如下
^{pr2}$但是我更喜欢一个迭代器,我可以将数组边距传递给它进行迭代(在上面的例子中margins=[0,1])。在伪代码中,上面的示例将变成
[ z for z in iterate_over_margins(ii, margins=[0,1]) if z[1]>10 ]
在我自己开始编程之前,numpy或相关的包中难道没有这样的迭代器吗?我检查了nditer
,但它不能满足我的要求。在
这回答了一个稍有不同的问题,但是,正如您肯定知道的那样,NumPy通常从使用向量化操作中受益匪浅,因此,如果您的}可以被矢量化,您还可以考虑在包含所有按顺序迭代的元素的数组上操作。你可以做一些重塑:
f
和{所以,如果
^{pr2}$g
和f
是向量化的,你可以这样做但是,这确实需要更多的内存,因为您正在使用整个元素序列生成一个新数组,而不是一次处理一个元素。在
您可以通过沿着这些列建立索引来选择numpy数组的某些行/列,即
z[i,j,k]
。为了从特定维度选择所有元素,可以使用:
。例如,要迭代三维阵列的第一个和最后一个维度,请执行以下操作:相关问题 更多 >
编程相关推荐