簡體   English   中英

通過比較來自 Python 中其他數組的數據來創建新數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM