如何用迭代访问(2,N)型Numpy矩阵的axis 0元素作为函数参数
问题描述
我有一个形状为(2, N)的Numpy二维矩阵,示例矩阵arr如下:
import numpy as np arr = np.array([[2, 4, 6], [10, 20, 30]]) print(arr.shape) arr
输出:
(2, 3) array([[ 2, 4, 6], [10, 20, 30]])
现有一个用于两数相加的add_two函数:
def add_two(a, b): return a + b
我希望通过迭代获取(2,10)、(4,20)、(6,30)这样的元素对,作为add_two函数的参数传入,以得到如下输出:
The sum is 12 The sum is 24 The sum is 36
请问该如何实现?
解决方案
这里提供几种可行的实现方式:
方法1:转置矩阵后循环迭代
先将原矩阵转置,把每一列转换为一行,即可直接遍历每组元素对:
import numpy as np def add_two(a, b): return a + b arr = np.array([[2, 4, 6], [10, 20, 30]]) # 转置后矩阵形状变为(3,2) for pair in arr.T: total = add_two(pair[0], pair[1]) print(f"The sum is {total}")
方法2:使用zip函数直接配对两行元素
直接将矩阵的第一行和第二行通过zip配对,无需转置操作:
import numpy as np def add_two(a, b): return a + b arr = np.array([[2, 4, 6], [10, 20, 30]]) for a, b in zip(arr[0], arr[1]): total = add_two(a, b) print(f"The sum is {total}")
方法3:利用Numpy向量化操作(无需显式循环)
如果不需要强制调用add_two函数,可直接用Numpy的向量化运算批量计算,再格式化输出:
import numpy as np arr = np.array([[2, 4, 6], [10, 20, 30]]) sums = arr[0] + arr[1] for s in sums: print(f"The sum is {s}")
若必须调用add_two,可以用np.vectorize包装函数后批量处理:
import numpy as np def add_two(a, b): return a + b arr = np.array([[2, 4, 6], [10, 20, 30]]) vectorized_add = np.vectorize(add_two) sums = vectorized_add(arr[0], arr[1]) for s in sums: print(f"The sum is {s}")
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

