我想从ufunc
中得到给定两个ndarray
的值的矩阵,例如:
degs = numpy.array(range(5))
pnts = numpy.array([0.0, 0.1, 0.2])
values = scipy.special.eval_chebyt(degs, pnts)
上面的代码不起作用(它给出了一个ValueError
,因为它试图广播两个数组,但失败了,因为它们有不同的形状:(5,)和(3,);我想得到一个值矩阵,其中行对应于度,列对应于多项式求值的点(反之亦然,这无关紧要)。你知道吗
目前我的解决方法只是使用for
-loop:
values = numpy.zeros((5,3))
for j in range(5):
values[j] = scipy.special.eval_chebyt(j, pnts)
有办法吗?一般来说,如果有n
类数组参数,如何让ufunc
知道您需要一个n
维数组?你知道吗
我知道numpy.vectorize
,但这似乎既不比简单的for
循环更快,也不比简单的for
循环更优雅(我甚至不确定您是否可以将其应用于现有的ufunc
)。你知道吗
更新接收3个或更多参数的ufunc
怎么样?尝试outer
方法会得到ValueError: outer product only supported for binary functions
。例如,scipy.special.eval_jacobi
。你知道吗
您需要的正是ufuncs的outer方法:
更新
要获得更多参数,必须手动广播。meshgrid通常有助于实现这一点,跨越维度中的每个参数。例如:
重塑broadcasting的输入参数。在这种情况下,将
degs
的形状改为(5,1)而不是(5,1)。与形状(3,1)一起广播的形状(5,1)产生形状(5,3):相关问题 更多 >
编程相关推荐