如何通过两个TRUE条件将数组添加两次



这是我的代码:

import numpy as np
from scipy.ndimage.interpolation import shift
B = np.array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
F = np.array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
M = np.array([[1, 2, 1, 2, 1],
[1, 2, 1, 2, 1],
[1, 2, 1, 2, 0],
[1, 2, 1, 2, 1],
[1, 2, 1, 2, 1]])
if F[2, 4] == 1:
B = np.add(M, B)
if F[1, 4] == 1:
M_shift = shift(M, (-1, 0), cval=0)
B = np.add(M_shift, B)
print(B)

如果F的条件成立,我想把M加到B上。在这个例子中,如果条件为真,并且我认为我的代码会将M添加到B的两倍。但显然它不起作用?怎么了?

提前谢谢。

阵列编辑:

在这种情况下,我想要的输出是,我的代码片段应该添加带有B的矩阵,以及M的移位版本。因为这两个条件都是True。但正如你所说,第一个赋值被覆盖了。如何防止这种情况下的覆盖?

分配后的输出应该是这样的:

B = np.array([[2, 4, 2, 4, 2],
[2, 4, 2, 4, 1],
[2, 4, 2, 4, 1],
[2, 4, 2, 4, 2],
[1, 2, 1, 2, 1]])

我想一个好方法是使用for循环,因为如果有1,我想检查矩阵F中的所有数组条目。但我认为如果我使用np.add函数,我会再次覆盖

您在第二个if中覆盖B,因此之前的任何值都将被擦除。不确定你试图在代码中实现什么,但你不想要这样的东西吗:

B = np.add(M_shift, B)

intermediateVal = np.add(M_shift, F)
B = np.add(B, intermediateVal)

最新更新