我想根据长度为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进行编码还很陌生,所以我不确定是否有更紧凑/更方便的方法来计算此张量。
答案 0 :(得分:4)
我们可以利用np.ix_
创建输入数组的开放网格版本,然后将其馈送到np.multiply.reduce
中以对所有这些元素进行逐元素乘法缩减,就像这样-
A = np.multiply.reduce(np.ix_(*[x]*M))
扩展到其他支持的功能
我们可以将其扩展到其他具有reduce
方法的ufunc。因此,例如要执行外部addition
,它应该是-
np.add.reduce(np.ix_(*[x]*M))
以此类推。
有关支持此功能的ufuncs
的完整列表,请参阅docs
。 Grep
之后,我得到了以下支持reduce
方法的ufunc,因此可以利用先前发布的方法:
加,减,乘,除,logaddexp,logaddexp2,true_divide, floor_divide,负数,正数,功率,余数,mod,fmod,divmod, 绝对,fabs,rint,符号,heaviside,conj,exp,exp2,log,log2, log10,expm1,log1p,sqrt,正方形,cbrt,倒数,gcd,lcm,sin, cos,tan,arcsin,arcos,arctan,arctan2,hypo,sinh,cosh,tanh, arcsinh,arccosh,arctanh,deg2rad,rad2deg,bitwise_and,bitwise_or, bitwise_xor,反转,left_shift,right_shift,更大,更大等于, less,less_equal,not_equal,equal,logical_and,logical_or, 逻辑异或,逻辑非,最大值,最小值,fmax,fmin,等值, isinf,isnan,isat,晶圆厂,signbit,copysign,nextafter,space, modf,ldexp,frexp,fmod,floor,ceil,trunc