我想从长度为n的向量x创建一个m-模,n-维张量a
A_[i_1, i_2, ... , i_M] = x[i_1] * x[i_2] * ... * x[i_M].
我目前掌握的代码是
A=np.multiply.outer(x,x)
for i in range(M-2):
A=np.multiply.outer(A,x)
我对用python编写代码比较陌生,所以我不确定是否有一种更紧凑/更方便的方法来计算这个张量。
最佳答案
我们可以使用np.ix_
来创建输入数组的开放网格版本,然后将这些输入数组馈送到np.multiply.reduce
以实现所有这些数组的元素级乘法缩减,如下所示-
A = np.multiply.reduce(np.ix_(*[x]*M))
扩展到其他支持ufunc
我们可以将其扩展到其他具有
reduce
方法的ufunc。例如,要执行outeraddition
,则-np.add.reduce(np.ix_(*[x]*M))
等等。
有关支持此功能的
ufuncs
的完整列表,请参阅docs
在对这些方法进行Grep
-之后,我得到了以下支持reduce
方法的ufunc,因此可以利用之前发布的方法:加、减、乘、除、logaddexp、logaddexp2、真除法,
底除法,负,正,幂,余数,mod,fmod,divmod,
绝对值,fabs,rint,sign,heaviside,conj,exp,exp2,log,log2,
log10,expm1,log1p,sqrt,square,cbrt,倒数,gcd,lcm,sin,
cos,tan,arcin,arccos,arctan,arctan2,hypot,sinh,cosh,tanh,
ArcSinh、ArcCosh、ArcTanh、Deg2Rad、Rad2Deg、Bitwise_和Bitwise_或,
位异或,反转,左移,右移,大,大等于,
少,少等于,不等于,等于,逻辑与,逻辑或,
LogiLog-XOR,LogixIn,最大,最小,FMAX,Fmin,有限,
isinf,isnan,isnat,fabs,signbit,copysign,nextafter,间距,
modf,ldexp,frexp,fmod,地板,天花板,trunc
关于python - 向量本身的M乘积的外积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53932846/