python - 如何通过两个 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。在这个例子中,两个 if 条件都为真,我认为我的代码会将 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 循环,因为我想检查矩阵 F 中的所有数组条目,如果有 1。但我认为如果我使用 np.add 函数,我会再次覆盖它
解决方案
您在第二个 if 中覆盖 B,因此任何先前的值都将被删除。不确定您要在代码中实现什么,但您不想要类似的东西:
B = np.add(M_shift, B)
或者
intermediateVal = np.add(M_shift, F)
B = np.add(B, intermediateVal)
推荐阅读
- python - 是否可以通过 QML 从 PySide2 插槽(服务调用)获取对象列表?
- opengl - 了解这个 YUV 到 RGB 转换的着色器
- bash - 在显示实时输出的函数中执行命令
- android - Firestore 多次写入同一个文档并停止工作一段时间
- python - 如何正确使用 pitch_shift (librosa)?
- java - 我如何从 Spring Security 抛出自定义响应
- azure-devops - 在 Linux 代理上读取 JSON 文件并将其部署在 DCOS 上
- google-app-engine - 由于付费应用的配额,AppEngine blobstore.CreateUploadURL 调用失败
- spring-boot - Spring Boot 2.1.5 不记录现有端点
- oracle - 如何在单个查询中定义多个(WITH AS FUNCTIONS)?