如何在多维数组中混合元素使用numpy frompyfunc()?
解决numpy多维数组元素交叉混合运算的问题
首先你用accumulate的方式不对,这个方法是做累积迭代运算,比如输入[[1,2], [3,4]]时,它会先返回第一个元素[1,2],再返回第一个元素和第二个元素运算后的结果,最终得到的是array([[1, 2], list([4, 6])], dtype=object),不是你要的[4,6]。
下面给你两种实现需求的方法:
方法一:直接索引计算(最简单高效)
既然需求明确是两个子数组的交叉位相加,直接取对应索引计算即可,不需要用到frompyfunc:
import numpy as np arr = np.array([[1,2], [3,4]]) result = np.array([arr[0, 0] + arr[1, 1], arr[0, 1] + arr[1, 0]]) # 输出:array([4, 6])
方法二:用frompyfunc直接调用(满足你的函数使用需求)
如果你一定要用frompyfunc创建自定义函数,直接对两个子数组调用这个函数就行,不用accumulate:
import numpy as np # 创建自定义通用函数 uadd = np.frompyfunc(lambda x, y: [x[0] + y[1], x[1] + y[0]], 2, 1) arr = np.array([[1,2], [3,4]]) # 直接传入两个子数组运算,再转成numpy数组 result = np.array(uadd(arr[0], arr[1])) # 输出:array([4, 6])
简单总结:accumulate是用来做连续累积运算的,比如对[a,b,c]依次计算a、a op b、(a op b) op c,和你要的仅对两个元素做一次交叉运算的场景不匹配,直接调用自定义函数或者手动索引计算就能得到你要的结果。
内容的提问来源于stack exchange,提问作者Nitaa a
相关产品推荐
相关产品推荐

