Python中如何绑定numpy数组同索引子数组元素并使用内置函数求和
解决方案
同索引元素绑定
直接使用numpy内置的转置方法即可实现,二维数组转置后每一行就是不同子数组同索引位置的元素集合,完全适配任意数量子数组的场景:
import numpy as np # 示例输入,可替换为任意数量子数组的二维数组 input_arr = np.array([[1,2,3],[4,5,6]]) # 转置得到shape为(3,2)的数组,每行对应同索引元素组 bind_arr = input_arr.T # 转为元组列表格式,输出为[(1, 4), (2, 5), (3, 6)] output = [tuple(row) for row in bind_arr]
同索引元素求和
不需要先绑定再计算,直接调用numpy.sum指定axis=0按列求和即可,支持任意数量子数组:
sum_result = np.sum(input_arr, axis=0) # 输出为array([5, 7, 9]),转为列表即可得到[5,7,9]
如果需要支持可变参数形式(*input传参),可以封装为以下函数:
def calc_by_index(*sub_arrays): full_arr = np.array(sub_arrays) bind_result = full_arr.T sum_result = np.sum(full_arr, axis=0) return bind_result, sum_result # 测试传入3个子数组 bind_res, sum_res = calc_by_index([1,2,3], [4,5,6], [7,8,9]) # sum_res输出为array([12,15,18]),对应各位置元素累加结果
原有方案问题说明
numpy.add仅支持两个数组运算,多数组累加直接用numpy.sum指定轴即可,没有参数数量限制- 你写的zip语法错误,纯Python实现的正确写法为
for items in zip(*input_arr):,不需要额外循环索引,不过numpy内置方法的运行效率远高于纯Python遍历,更推荐使用。
内容的提问来源于stack exchange,提问作者Sung Hoon Kim
相关产品推荐
相关产品推荐

