【问题标题】:How to add an array twice by two TRUE conditions?如何通过两个 TRUE 条件将数组添加两次?
【发布时间】:2018-11-29 15:45:32
【问题描述】:

这是我的代码:

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。在这个例子中,两个 if 条件都为真,我认为我的代码会将 M 添加到 B 的两倍。但显然它不起作用?怎么了?

提前致谢。

编辑arra:

在这种情况下,我想要的输出是,我的代码 sn-p 应该添加带有 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 循环,因为我想检查矩阵 F 中的所有数组条目,如果有 1。但我认为如果我使用 np.add 函数,我会再次覆盖它

【问题讨论】:

  • Viktor 的回答似乎很好——第一个作业被覆盖了——但是你能编辑你的问题更清楚吗?您还可以包括您想要的输出吗?当我读到“如果 F 的条件为真,我想将 M 添加到 B”时,取决于F 的格式的两种可能性是B += F*M,如果“条件”指的是@中的单元格值987654325@ 和 B += M if condition(F) else np.zeros(B.shape) 如果条件与 F 上的某些功能相关;显然你的意思都不是。
  • 我为你编辑了这个问题。你现在更清楚了吗?

标签: python numpy if-statement shift


【解决方案1】:

您在第二个 if 中覆盖 B,因此任何先前的值都将被删除。不知道你想在你的代码中实现什么,但你不想要这样的东西:

B = np.add(M_shift, B)

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

【讨论】:

  • 好的,谢谢提醒! np.add(M_shift, B) 解决了这个问题。现在它的工作原理是,如果这两个条件都为真,代码会将它都添加到矩阵 B
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2020-10-11
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2014-04-10
相关资源
最近更新 更多