繁体   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