【问题标题】:Creating a new array by comparing data from other arrays in Python通过比较 Python 中其他数组的数据来创建新数组
【发布时间】:2020-03-19 13:49:07
【问题描述】:

我目前有 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 不是很精通,可以用手。

【问题讨论】:

  • a = [10,20,30] [15,20,18] 应该代表什么?它不是一个有效的文字,它应该是什么样的伪数据结构也不清楚。
  • 我对你的数组有点困惑。根据您的问题,我认为它们是数组数组。所以就像 a = [[10,20,30], [15,20,18]]。注意额外的括号。
  • 嗨,欢迎来到 SO!请您发布一个您到目前为止所做的最小示例吗?

标签: python arrays loops if-statement


【解决方案1】:

如果你对循环没问题,你可以这样做

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

【讨论】:

  • 感谢 sedrick,这是我最初尝试使用的方法,我未能在“和”之后重复参数。所以我在做;如果 a[i][j] > b 和 c。感谢您解决这个问题!
【解决方案2】:

假设您的数组实际上是有效的 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)

【讨论】:

    【解决方案3】:

    您可以使用内置的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() 调用中添加更多)和多维列表(只需相应地嵌套列表理解)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      相关资源
      最近更新 更多