是否可以使用 numpy 将一个数组求为另一个数组的幂,从而产生比输入维度更大的结果 - 即不仅仅是简单的元素明智求幂。
作为一个简单的例子,我希望计算以下内容。下面是“普通”形式 - 实际上,这是通过大型 x
数组上的循环来实现的,因此速度很慢。
x = np.arange(4)
t = np.random.rand(3,3)
y = np.empty_like(x)
y[0] = np.sum(x[0]**t)
y[1] = np.sum(x[1]**t)
y[2] = np.sum(x[2]**t)
y[3] = np.sum(x[3]**t)
我想要一个矢量化解决方案来代替每次执行y[i]
。但是,由于 x 的形状为 [4]
且 y 的形状为 [3,3]
,因此当我尝试计算 x**t
时,我出现错误。
有没有快速优化的解决方案?
最佳答案
直接的矢量化方式是使用广播
-
y = (x[:,None,None]**t).sum((1,2)).astype(x.dtype)
或者使用内置的np.power.outer
-
y = np.power.outer(x,t).sum((1,2)).astype(x.dtype)
<小时/>
对于大型数组,通过 numexpr
模块利用多核 -
import numexpr as ne
y = ne.evaluate('sum(x3D**t1D,1)',{'x3D':x[:,None],'t1D':t.ravel()}).astype(x.dtype)
关于python - 将数组提升为另一个数组的幂 - 即扩展数组的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59057824/