Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用条件and函数修改Numpy数组_Python 2.7_Numpy - Fatal编程技术网

Python 2.7 如何使用条件and函数修改Numpy数组

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

我有一个大约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 < 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函数可以帮助处理此类代码:


谢谢,这很有效。到目前为止,我需要10个面具。有没有比制作10个面具更好的方法呢?谢谢,这很有效。到目前为止,我需要10个面具,还有比创造10个面具更好的方法吗?