花式索引到矩阵运算

问题描述

假设:

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]

更有效的替代方法是使用wherenp.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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...