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
您認為計算更快的解決方案是什么?
添加回答
舉報