2024-03-29 15:31:12 发布
网友
在python中,如何划分两个numpy矩阵A和{},而这两个矩阵有时在同一个单元格上有0?在
A
基本上A[i,j]>=B[i,j]对于所有i,j。我需要计算C=A/B。但有时{}。当发生这种情况时,我需要将A[i,j]/B[i,j]定义为0。在
A[i,j]>=B[i,j]
i
j
C=A/B
A[i,j]/B[i,j]
除了浏览所有索引之外,还有没有一种简单的python方法?在
您可以对ufunc使用^{}参数,例如^{}:
np.true_divide(A, B, where=(A!=0) | (B!=0))
如果没有负值(如注释中所述)和每个元素的A >= B(如问题中所述),可以将其简化为:
A >= B
因为A[i, j] == 0意味着{}。在
A[i, j] == 0
例如:
import numpy as np A = np.random.randint(0, 3, (4, 4)) B = np.random.randint(0, 3, (4, 4)) print(A) print(B) print(np.true_divide(A, B, where=(A!=0) | (B!=0))) [[1 0 2 1] [1 0 0 0] [2 1 0 0] [2 2 0 2]] [[1 0 1 1] [2 2 1 2] [2 1 0 1] [2 0 1 2]] [[ 1. 0. 2. 1. ] [ 0.5 0. 0. 0. ] [ 1. 1. 0. 0. ] [ 1. inf 0. 1. ]]
另一种方法:只需在除法后替换nans:
nan
C = A / B # may print warnings, suppress them with np.seterrstate if you want C[np.isnan(C)] = 0
您可以使用带^{}的掩码在这样的A and B being both zeros或其他情况中进行选择,然后分别将0或元素除法-
A and B being both zeros
0
from __future__ import division # For Python 2.x mask = (A == B) & (A==0) C = np.where(mask, 0, A/B)
关于掩码的创建:(A==B)将是A和{}之间相等的所有元素的掩码,使用(A==0)我们有一个包含{}中所有元素的掩码。因此,使用(A == B) & (A==0)的组合掩码,我们就得到了A和{}都是零的地方的掩码。一个更简单、更容易理解的版本是检查A和{}中的0,它将是:
(A==B)
(A==0)
(A == B) & (A==0)
关于np.where的用法,其语法是:
np.where
C = np.where(mask, array1, array2)
也就是说,我们将根据掩码选择分配到C中的元素。如果对应的掩码元素是True,那么我们从array1中选取相应的元素,否则从{}中选取相应的元素。这是在元素级别完成的,因此,我们得到了输出C。在
C
True
array1
样本运行-
In [48]: A Out[48]: array([[4, 1, 4, 0, 3], [0, 4, 1, 4, 3], [1, 0, 0, 4, 0]]) In [49]: B Out[49]: array([[4, 2, 2, 1, 4], [2, 1, 2, 4, 2], [4, 0, 2, 0, 3]]) In [50]: mask = (A == B) & (A==0) In [51]: np.where(mask, 0, A/B) Out[51]: array([[ 1. , 0.5 , 2. , 0. , 0.75], [ 0. , 4. , 0.5 , 1. , 1.5 ], [ 0.25, 0. , 0. , inf, 0. ]])
您可以对ufunc使用^{} 参数,例如^{} :
如果没有负值(如注释中所述)和每个元素的
^{2}$A >= B
(如问题中所述),可以将其简化为:因为}。在
A[i, j] == 0
意味着{例如:
另一种方法:只需在除法后替换
nan
s:您可以使用带^{} 的掩码在这样的
A and B being both zeros
或其他情况中进行选择,然后分别将0
或元素除法-关于掩码的创建:}之间相等的所有元素的掩码,使用}中所有元素的掩码。因此,使用}都是零的地方的掩码。一个更简单、更容易理解的版本是检查}中的0,它将是:
^{2}$(A==B)
将是A
和{(A==0)
我们有一个包含{(A == B) & (A==0)
的组合掩码,我们就得到了A
和{A
和{关于
np.where
的用法,其语法是:也就是说,我们将根据掩码选择分配到}中选取相应的元素。这是在元素级别完成的,因此,我们得到了输出
C
中的元素。如果对应的掩码元素是True
,那么我们从array1
中选取相应的元素,否则从{C
。在样本运行-
相关问题 更多 >
编程相关推荐