2 回答
TA贡献1886条经验 获得超2个赞
就我个人而言,我发现仅使用索引来遍历矩阵更容易:
a = ([1, 2, 3], [3, 4, 5], [5, 6, 7])
b = ([2, 3, 1], [3, 5, 4], [4, 4, 4])
c = ([0, 0, 0], [0, 0, 0], [0, 0, 0])
for i in range(len(a)):
for j in range(len(a[0])):
if a[i][j] < b[i][j]:
c[i][j] = 0
else:
c[i][j] = a[i][j]
如果使用索引循环 a 和 b,则可以访问 c 中的相同位置。
i 索引跟踪您所在的列表(即,a 中索引 0 处的列表是 [1, 2, 3],b 中索引 0 处的列表是 [2, 3, 1])。
j 索引跟踪您所在的每个列表的哪个元素(即,a 中索引 0 处的列表中的元素 0 为 1,b 中索引 0 处的列表中的元素 0 为 2)。
这样您就可以直接访问 3 个矩阵中任意一个的任意元素。此外,由于 c 中的每个元素都以 0 开头,因此当 a 中的元素小于 b 中的元素时,您不需要将其重新分配为 0,因此您可以简化 if/else 语句,只需执行以下操作即可
if a[i][j] >= b[i][j]:
c[i][j] = a[i][j]
TA贡献1829条经验 获得超9个赞
我真的很喜欢您的解决方案和反馈,非常感谢您!
然而,与此同时,我自己找到了一个解决方案(我将只输入我使用的循环):
for i, a_i in enumerate(a):
a_1 = a_i
c = a_1
for i, b_i in enumerate(b):
b_1 = b_i
c[np.where(c < b_1)] = np.nan
您认为计算更快的解决方案是什么?
添加回答
举报