是否可以使用numpy将数组提升到另一个数组的功率,从而产生一个比输入维度更大的结果?也就是说,不仅仅是简单的元素明智地提高到。
作为一个简单的例子,我希望计算以下内容。下面是"longhand“表单--在实践中,这是由大型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时,会得到一个错误。
有没有快速优化的解决方案?
发布于 2019-11-26 19:09:40
一种直接向量化的方法是使用broadcasting -
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)https://stackoverflow.com/questions/59057824
复制相似问题