You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:29:07