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