Наружное произведение вектора с самим собой М-раз - PullRequest
0 голосов
/ 26 декабря 2018

Я хотел бы создать M-режим, n-мерный тензор A из вектора x длины n, такой что

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 голосов
/ 26 декабря 2018

Мы могли бы использовать np.ix_ для создания версий входного массива с открытой сеткой и затем передавать их в np.multiply.reduce для поэлементного сокращения умножения для всех этих,вот так -

A = np.multiply.reduce(np.ix_(*[x]*M))

Распространение на другие поддерживающие ufuncs

Мы можем распространить это на другие ufuncs, которые имеют метод reduce.Так, например, для выполнения внешнего addition это будет -

np.add.reduce(np.ix_(*[x]*M))

и т. Д.

Полный список ufuncs, поддерживающих эту функцию, см. Вdocs.После Grep -ing для них я получил следующие ufuncs, которые поддерживают метод reduce и, следовательно, могут использовать ранее опубликованный подход:

сложение, вычитание, умножение, деление, logaddexp, logaddexp2,true_divide, floor_divide, отрицательный, положительный, мощность, остаток, мод, fmod, divmod, абсолютный, потрясающие, rint, знак, heavyiside, coe, exp, exp2, log, log2, log10, expm1, log1p, sqrt, квадрат, cbrt,взаимные, gcd, lcm, sin, cos, tan, arcsin, arccos, arctan, arctan2, hypot, sinh, cosh, tanh, arcsinh, arccosh, arctanh, deg2rad, rad2deg, bitwise_and, bitwise_or, bitwise_xor, инвертировать, сдвиг влево, вправо_больше, больше, меньше, меньше, меньше, неравенство, не_эквивалент, равно, логический_и логический_или, логический_ксор, логический_нот, максимум, минимум, fmax, fmin, isfinite, isinf, isnan, isnat, fabs, signbit, copysign, nextafter, интервал, modf, ldexp,frexp, fmod, пол, потолок, ствол

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...