[英]Creating a new array by comparing data from other arrays in Python
我目前有 3 個數組 (36 x 36),現在我想創建一個比較原始三個數組的第四個數組,並根據哪個數組在所述單元格中具有最大值繪制一個設定值。 我能想到的最簡單的解釋方法如下。
假設我有數組;
a = [10,20,30]
[15,20,18]
b = [0,10,70]
[36,67,9]
c = [0,50,20]
[100,4,45]
我想創建一個新數組,當 'a' 具有最大值時繪制 1,當 b 最大時繪制 2,當 c 具有最大值時繪制 3。
所以新數組應該是這樣的;
new_array = [1,3,2]
[3,2,3]
我知道這可能是一個非常簡單的循環,但我對 Python 不是很精通,可以用手。
如果你對循環沒問題,你可以做這樣的事情
new_array = [[0 for x in range(36)] for y in range(36)]
for i in range(36):
for j in range(36):
if (a[i][j] >= b[i][j] and a[i][j] >= c[i][j]):
new_array[i][j] = 1
elif (b[i][j] >= a[i][j] and b[i][j] >= c[i][j]):
new_array[i][j] = 2
else:
new_array[i][j] = 3
假設您的數組實際上是有效的 numpy 數組,如下所示:
a = [[10,20,30],
[15,20,18]]
b = [[0,10,70] ,
[36,67,9]]
c = [[0,50,20],
[100,4,45]]
a = np.array(a)
b = np.array(b)
c = np.array(c)
你可以用
np.argmax(np.stack([a, b, c], axis=0), axis=0) + 1
>>> array([[1, 3, 2],
[3, 2, 3]], dtype=int64)
您可以結合使用內置的max()
和tuple.index()
以及zip()
將相應的元素分組到一個元組中,然后找到每個元素來自的原始列表:
a = [10, 20, 30, 15, 20, 18]
b = [0, 10, 70, 36, 67, 9]
c = [0, 50, 20, 100, 4, 45]
new_array = [(tup.index(max(tup)) + 1) for tup in zip(a, b, c)]
# [1, 3, 2, 3, 2, 3]
這個解決方案很容易擴展到更多列表(只需向zip()
調用添加更多)和多維列表(只需相應地嵌套列表理解)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.