向量本身的M乘积的外积

时间:2018-12-26 13:36:48

标签: python numpy multidimensional-array

我想根据长度为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进行编码还很陌生,所以我不确定是否有更紧凑/更方便的方法来计算此张量。

1 个答案:

答案 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的完整列表,请参阅docsGrep之后,我得到了以下支持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