Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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:numpy数组的条件加号运算符_Python_Numpy - Fatal编程技术网

python:numpy数组的条件加号运算符

python:numpy数组的条件加号运算符,python,numpy,Python,Numpy,我想在两个numpy数组上应用加号操作符。然而,有一个限制。 我只想对数组1中的元素求和,如果它不是零。我可以做一个循环,但是速度很慢。有没有一种典型的方法 if a1[xyz] != 0: r[xyz] = a1[xyz] + a2[xyz] 使用遮罩: mask = a1 != 0 r[mask] = a1[mask] + a2[mask] 这假设r、a1、a2具有相同的形状。使用遮罩: mask = a1 != 0 r[mask] = a1[mask] + a2[mask]

我想在两个numpy数组上应用加号操作符。然而,有一个限制。 我只想对数组1中的元素求和,如果它不是零。我可以做一个循环,但是速度很慢。有没有一种典型的方法

if a1[xyz] != 0:
    r[xyz] = a1[xyz] + a2[xyz] 
使用遮罩:

mask = a1 != 0
r[mask] = a1[mask] + a2[mask]
这假设
r、a1、a2具有相同的形状。

使用遮罩:

mask = a1 != 0
r[mask] = a1[mask] + a2[mask]

这假设
r,a1,a2
具有相同的形状。

另一种快速方式:
np。其中(a1==0,r,a1+a2)
另一种快速方式:
np。其中(a1==0,r,a1+a2)
如我在中所述,许多
ufunc
采用
where
参数

在这种情况下,我们可以使用
np。通过以下方式添加

In [168]: r = np.arange(10)
In [169]: a1 = np.ones(10,int); a1[3:7]=0
In [170]: mask = a1.astype(bool)
In [171]: mask
Out[171]: array([ True,  True,  True, False, False, False, False,  True,  True,  True], dtype=bool)
In [172]: a2 = np.arange(10,20)

In [173]: a1+a2
Out[173]: array([11, 12, 13, 13, 14, 15, 16, 18, 19, 20])
In [174]: np.add(a1,a2)
Out[174]: array([11, 12, 13, 13, 14, 15, 16, 18, 19, 20])

In [175]: np.add(a1,a2, where=mask, out=r);
In [176]: r
Out[176]: array([11, 12, 13,  3,  4,  5,  6, 18, 19, 20])
如果没有
out
,则
where
会在屏蔽掉的元素中留下“随机”值

在上一篇文章中,此
的计时与
屏蔽的
等效程序大致相同

如果要使用复合遮罩,请尝试类似于
mask=(a1!=0)和(a2>15)
的方法。()很重要。

正如我在中所指出的,许多
ufunc
使用
where
参数

在这种情况下,我们可以使用
np。通过以下方式添加

In [168]: r = np.arange(10)
In [169]: a1 = np.ones(10,int); a1[3:7]=0
In [170]: mask = a1.astype(bool)
In [171]: mask
Out[171]: array([ True,  True,  True, False, False, False, False,  True,  True,  True], dtype=bool)
In [172]: a2 = np.arange(10,20)

In [173]: a1+a2
Out[173]: array([11, 12, 13, 13, 14, 15, 16, 18, 19, 20])
In [174]: np.add(a1,a2)
Out[174]: array([11, 12, 13, 13, 14, 15, 16, 18, 19, 20])

In [175]: np.add(a1,a2, where=mask, out=r);
In [176]: r
Out[176]: array([11, 12, 13,  3,  4,  5,  6, 18, 19, 20])
如果没有
out
,则
where
会在屏蔽掉的元素中留下“随机”值

在上一篇文章中,此
的计时与
屏蔽的
等效程序大致相同


如果要使用复合遮罩,请尝试类似于
mask=(a1!=0)和(a2>15)
的方法。(),错过了。我想你正在寻找
np。其中
使用掩蔽:
r=a1+a2*(a1!=0)
,对于初始化的
r
@Divakar OP的代码似乎更新了一个现有的
r
而没有触及
a1==0
@PaulPanzer的值,这就是为什么注释末尾的限定符。@Divakar,抱歉,错过了。谢谢,奇怪的是,如果我添加多个条件,我似乎会中断:mask=(img_数组==0或img_数组==1)你知道为什么吗?
在元素方面不起作用。您必须使用
|
。由于运算符的优先级,您还必须在各个条件周围加上括号。谢谢,奇怪的是,如果我添加多个条件,我似乎会中断:mask=(img_数组==0或img_数组==1)您知道为什么吗?
在元素方面不起作用。您必须使用
|
。由于运算符的优先级,您还必须在各个条件周围加上括号。