Python 2.7 如何使用条件and函数修改Numpy数组
我有一个大约8e6元素的3d,我需要更改所有元素。我想做这样的事情Python 2.7 如何使用条件and函数修改Numpy数组,python-2.7,numpy,Python 2.7,Numpy,我有一个大约8e6元素的3d,我需要更改所有元素。我想做这样的事情 def func(x, index): .... flat = array.reshape(-1) flat[flat == 9999] = 0 flat[flat >= 0.2 and flat < 0.7] = func(flat, 0) flat[flat >= 0.7 and flat < 1.5] = func(flat, 1) flat[flat >= 0.7 and flat &l
def func(x, index):
....
flat = array.reshape(-1)
flat[flat == 9999] = 0
flat[flat >= 0.2 and flat < 0.7] = func(flat, 0)
flat[flat >= 0.7 and flat < 1.5] = func(flat, 1)
flat[flat >= 0.7 and flat < 1.5] = func(flat, 2)
....
...
def func(x,索引):
....
展开=阵列。重塑(-1)
平坦[平坦==9999]=0
平坦[平坦>=0.2且平坦<0.7]=func(平坦,0)
平坦[平坦>=0.7且平坦<1.5]=func(平坦,1)
平坦[平坦>=0.7且平坦<1.5]=func(平坦,2)
....
...
这个代码不起作用。我尝试了np.nditer,但它不允许我检索每个索引的值,它似乎在检索整个数组。简而言之,对于每个维度的循环和读写每个值,是否有其他方法可以做到这一点
谢谢在使用多个条件进行掩蔽时,您需要使用位运算符
&
:
flat[(flat >= 0.2) & (flat < 0.7)] = ...
或者,如果您的func
是元素式的:
mask = (flat >= 0.2) & (flat < 0.7)
flat[mask] = func(flat[mask], 0)
mask=(平坦>=0.2)和(平坦<0.7)
展开[mask]=func(展开[mask],0)
然后对其他2个条件重复相同的过程
作为奖励,您可以迭代所有下限范围,并执行以下操作:
lower_bound = [0.2, 0.7, 1.5]
upper_bound = lower_bound[1:] + [np.inf]
for i in range(len(lower_bound)):
mask = (flat >= lower_bound[i]) & (flat < upper_bound[i])
flat[mask] = func(flat[mask], i)
下限=[0.2,0.7,1.5]
上界=下界[1::+[np.inf]
对于范围内的i(len(下限)):
掩码=(平坦>=下限[i])和(平坦<上限[i])
平坦[遮罩]=func(平坦[遮罩],i)
如果有100个范围,则可以避免写入100行。在使用多个条件进行掩蔽时,需要使用位运算符
&
:
flat[(flat >= 0.2) & (flat < 0.7)] = ...
或者,如果您的func
是元素式的:
mask = (flat >= 0.2) & (flat < 0.7)
flat[mask] = func(flat[mask], 0)
mask=(平坦>=0.2)和(平坦<0.7)
展开[mask]=func(展开[mask],0)
然后对其他2个条件重复相同的过程
作为奖励,您可以迭代所有下限范围,并执行以下操作:
lower_bound = [0.2, 0.7, 1.5]
upper_bound = lower_bound[1:] + [np.inf]
for i in range(len(lower_bound)):
mask = (flat >= lower_bound[i]) & (flat < upper_bound[i])
flat[mask] = func(flat[mask], i)
下限=[0.2,0.7,1.5]
上界=下界[1::+[np.inf]
对于范围内的i(len(下限)):
掩码=(平坦>=下限[i])和(平坦<上限[i])
平坦[遮罩]=func(平坦[遮罩],i)
如果你有100个范围,那就不用写100行了。语法是flat[(flat>=0.2)&(flat<0.7)]
和类似的。请注意,flat[-]=func(-)
的右侧必须具有相同数量的元素,因此需要在索引/屏蔽数组上调用func
有一些NumPy函数可以帮助处理此类代码:
flat[(flat>=0.2)和(flat<0.7)]
和类似的语法。请注意,flat[-]=func(-)
的右侧必须具有相同数量的元素,因此需要在索引/屏蔽数组上调用func
有一些NumPy函数可以帮助处理此类代码: