如何解决花式索引到矩阵运算
假设:
A=np.array([1,2,-4])
B=np.array([1,1,1])
C=np.array([1,3,4])
通过花式索引,我可以在A> 0的任何地方为C分配标量值。
C[A > 0]= 1
但是无论如何,只要A> 0都可以得到C = B / A,同时通过花式索引为A
C[A > 0] = B/A
我收到如下错误:
<input>:1: RuntimeWarning: divide by zero encountered in true_divide
Traceback (most recent call last):
File "<input>",line 1,in <module>
ValueError: NumPy boolean array indexing assignment cannot assign 4 input values to the 2 output values where the mask is true
我可以通过for循环或复制A&C来获得结果,其中:
D = np.copy(A)
E = np.copy(C)
D[ D <= 0]= 1
E=B/A
E[A <=0] = C
或设置C = Run(A,B)其中
def Run(A,B):
C=np.zeros(A.shape[0],A.shape[1])
for i in range(len(A)):
if A[i] != O:
C[i] = A[i]/B[i]
else:
C[i] = C[i]
但是我只是想知道是否存在一种更直接的方法,如果我循环数百万次,而无需添加太多步骤。谢谢。
解决方法
您可以索引操作数:C[A > 0] = B[A > 0] / A[A > 0]
。您可能要计算一次A > 0
,然后重新使用它,例如
mask = A > 0
C[mask] = B[mask] / A[mask]
更有效的替代方法是使用where
或np.divide
的{{1}}参数。例如,
np.floor_divide
我必须使用In [19]: A = np.array([1,2,-4])
In [20]: B = np.array([1,1,1])
In [21]: C = np.array([1,3,4])
In [22]: np.floor_divide(B,A,where=A > 0,out=C)
Out[22]: array([1,4])
In [23]: C
Out[23]: array([1,4])
,因为所有数组都是整数数组,并且floor_divide
创建了一个浮点数组,因此如果numpy.divide
数组为,该函数将抱怨类型不匹配。整数数组。如果要浮点结果,则out
应该是浮点值的数组:
C
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。