NumPy不同尺寸数组函数运算报错:广播维度不匹配咨询
问题分析与解决
问题根源
你遇到的广播错误,是因为numpy数组的维度不匹配:
abc[:,0]、abc[:,1]、abc[:,2]都是**形状(4,)**的一维数组,对应4组二次函数参数x是**形状(100,)**的一维数组
numpy广播规则要求两个数组的维度要么完全一致,要么其中一个数组的对应维度长度为1。而(4,)和(100,)既不同长度,也没有维度为1的情况,所以无法进行广播运算。
解决方案
只需要把每组参数的维度扩展为**(4,1)**,这样numpy就能自动把(4,1)和(100,)广播成(4,100)的形状,实现每组参数和所有x元素的计算。
方法1:调用函数时扩展维度
直接在参数索引后添加[:, None](或[:, np.newaxis])来增加一个维度:
import numpy as np x = np.linspace(-10,10,100) abc = np.array([[1,2,1], [1,3,5], [12.5,-6.4,-1.25], [4,2,1]]) def quadratic(a, b, c, x): return a*(x ** 2) + b*x + c # 扩展参数维度为(4,1) y = quadratic(abc[:,0, None], abc[:,1, None], abc[:,2, None], x) print(y.shape) # 输出(4, 100)
方法2:在函数内部处理维度
如果不想每次调用都写扩展代码,可以在函数里自动把a、b、c转为二维:
import numpy as np x = np.linspace(-10,10,100) abc = np.array([[1,2,1], [1,3,5], [12.5,-6.4,-1.25], [4,2,1]]) def quadratic(a, b, c, x): # 把一维参数转为(4,1)的二维数组 a = a[:, None] b = b[:, None] c = c[:, None] return a*(x ** 2) + b*x + c y = quadratic(abc[:,0], abc[:,1], abc[:,2], x) print(y.shape) # 输出(4, 100)
内容的提问来源于stack exchange,提问作者Netforce23
相关产品推荐
相关产品推荐

