如何用两个真条件两次相加一个数组?

2024-06-02 05:49:02 发布

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

这是我的密码:

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上。在这个例子中,如果条件都是真的,我认为我的代码将向B加两次M,但显然它不起作用?怎么了?你知道吗

提前谢谢。你知道吗

为arra编辑:

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

赋值后的输出应如下所示:

    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循环,因为我想检查矩阵F中的所有数组条目,如果有1。但我想如果我用np.添加函数我会再次覆盖它


Tags: 代码fromimportnumpyadd密码ifshift
1条回答
网友
1楼 · 发布于 2024-06-02 05:49:02

在第二个if中覆盖B,因此之前的任何值都将被删除。不确定您试图在代码中实现什么,但您不希望这样:

B = np.add(M_shift, B)

或者

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

相关问题 更多 >