numpy 2d数组操作,保持一定位置

2024-04-25 03:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个2d numpy数组:

X2d = np.array([[0,4,5,0],
                [7,8,4,3],
                [0,0,9,8]])

Y2d = np.array([[1,0,4,8],
                [0,3,8,5],
                [0,6,0,8]])

#and I would like to get these two:

X2dresult = np.array([[0,0,5,0],
                      [0,8,4,3],
                      [0,0,0,8]])

Y2dresult = np.array([[0,0,4,0],
                      [0,3,8,5],
                      [0,0,0,8]])

所以基本上我需要保持两个矩阵都大于0的位置。我能用吗努比。哪里函数或类似的东西来得到这些结果? 谢谢


Tags: andtonumpygetnp数组arraylike
2条回答
X2dresult = ((X2d > 0) & (Y2d > 0)) * X2d
Y2dresult = ((X2d > 0) & (Y2d > 0)) * Y2d

Z = ((X2d > 0) & (Y2d > 0)),则Z[i,j] = True当且仅当X2d[i,j] > 0Y2d[i,j] > 0

现在X2dresult = Z * X2d,所以X2dresult[i,j] = Z[i,j] * X2d[i,j],如果Z[i,j] = FalseX2d[i,j]如果Z[i,j] = True,则为0。(因为int(True) = 1int(False) = 0

因此,在X2dresult数组中,所有元素都0位于X2dY2d具有0的位置。你知道吗

您可以使用位AND或AND ^{}

>>> X2d = np.array([[0,4,5,0],
...                 [7,8,4,3],
...                 [0,0,9,8]])
>>> 
>>> Y2d = np.array([[1,0,4,8],
...                 [0,3,8,5],
...                 [0,6,0,8]])
>>> indices = np.where(~((X2d > 0) & (Y2d > 0)))
>>> X2d[indices] = 0
>>> Y2d[indices] = 0
>>> X2d
array([[0, 0, 5, 0],
       [0, 8, 4, 3],
       [0, 0, 0, 8]])
>>> Y2d
array([[0, 0, 4, 0],
       [0, 3, 8, 5],
       [0, 0, 0, 8]])

我认为按位OR读起来更好更清晰:

>>> X2d = np.array([[0,4,5,0],
...                 [7,8,4,3],
...                 [0,0,9,8]])
>>> 
>>> Y2d = np.array([[1,0,4,8],
...                 [0,3,8,5],
...                 [0,6,0,8]])
>>> indices = np.where((X2d == 0) | (Y2d == 0))
>>> X2d[indices] = 0
>>> Y2d[indices] = 0
>>> X2d
array([[0, 0, 5, 0],
       [0, 8, 4, 3],
       [0, 0, 0, 8]])
>>> Y2d
array([[0, 0, 4, 0],
       [0, 3, 8, 5],
       [0, 0, 0, 8]])

相关问题 更多 >