Python中比较3个36×36数组元素生成新数组的实现求助
解决多数组对应元素最大值标记问题
嘿,你的需求非常清晰,我来给你两种实现方案——一种是你预想的循环方式(适合新手理解逻辑),另一种是用numpy库的高效方案(处理36×36这种规模的数组会更简洁快速)。
方案一:基础循环实现(纯Python,无需额外库)
这种方法完全用原生Python的嵌套循环来遍历每个元素,逻辑直观,适合刚入门的同学理解:
# 示例输入数组 a = [[10,20,30],[15,20,18]] b = [[0,10,70],[36,67,9]] c = [[0,50,20],[100,4,45]] # 初始化新数组,和原数组维度一致 result = [] for row_a, row_b, row_c in zip(a, b, c): current_row = [] for num_a, num_b, num_c in zip(row_a, row_b, row_c): # 比较三个数值,赋值对应的标记 if num_a > num_b and num_a > num_c: current_row.append(1) elif num_b > num_a and num_b > num_c: current_row.append(2) else: current_row.append(3) result.append(current_row) print(result) # 输出: [[1,3,2],[3,2,3]]
这段代码的逻辑很直白:
- 用
zip函数同时遍历三个数组的每一行 - 再嵌套遍历每一行的对应元素
- 依次比较三个元素的大小,给新数组的对应位置赋值1/2/3
方案二:用numpy高效实现(推荐)
如果你的数组是36×36的规模,用numpy会更高效,代码也更简洁。先确保你已经安装了numpy(pip install numpy),然后看下面的代码:
import numpy as np # 转成numpy数组 a_np = np.array([[10,20,30],[15,20,18]]) b_np = np.array([[0,10,70],[36,67,9]]) c_np = np.array([[0,50,20],[100,4,45]]) # 把三个数组堆叠起来,axis=2表示在第三个维度上合并 stacked = np.stack([a_np, b_np, c_np], axis=2) # argmax找每个位置最大值的索引(0对应a,1对应b,2对应c),加1得到1/2/3 result_np = np.argmax(stacked, axis=2) + 1 # 转成普通列表(如果需要的话) result = result_np.tolist() print(result) # 输出: [[1,3,2],[3,2,3]]
这里的核心是np.stack把三个二维数组合并成一个三维数组(shape为(2,3,3)),然后np.argmax在第三个维度上找最大值的索引,最后加1就得到了你要的标记值。这种方法不需要写嵌套循环,numpy内部已经做了优化,处理大数组时速度会快很多。
两种方法都能满足你的需求,如果你只是想理解逻辑,选第一种;如果追求效率和简洁,选第二种就好啦!
内容的提问来源于stack exchange,提问作者Scott B
相关产品推荐
相关产品推荐

