【发布时间】: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