У меня есть два массива numpy, X и y. X имеет размер m, а y - размер n. Мне нужно умножить каждый элемент y на каждый элемент X, а затем просуммировать.

Что-то вроде [sum(X[0]*y) sum(X[1]*y) sum(X[n]*y)]

Это то, что я имею в виду

np.sum(X[:, np.newaxis] * y, axis=1)

Однако обычно X и y действительно большие, и поэтому

X[:, np.newaxis] * y

Создает огромный временный массив, который взрывает хлам. Есть ли лучший способ реализовать это?

2
Manoj 18 Авг 2014 в 17:38

1 ответ

Лучший ответ

Если вы умножаете каждый элемент y на каждый элемент X, просто сначала умножьте все элементы X вместе, а затем умножьте массив y на это число и сумма:

num = X.prod()

(num * y).sum()

Изменить: указанный вами массив можно получить, умножив массив X на сумму элементов y:

X * y.sum()
4
Alex Riley 18 Авг 2014 в 20:20
Спасибо, но это определенно не эквивалент np.sum(X[:, np.newaxis] * y, axis=1). Мне нужен 1d массив вроде [sum(X[1]*y), sum(X[2]*y), sum(X[3]*y)] и так далее.
 – 
Manoj
18 Авг 2014 в 17:53
2
Ах. В таком случае, возвращает ли X * y.sum() то, что вы хотите?
 – 
Alex Riley
18 Авг 2014 в 18:10
Ах черт побери. оно делает. это был действительно глупый вопрос.
 – 
Manoj
18 Авг 2014 в 18:13
Не беспокойтесь - я часто потратил целую вечность, пытаясь придумать что-то, что в конечном итоге имеет простое решение
 – 
Alex Riley
18 Авг 2014 в 18:17
- ответ должен быть актуальным сейчас
 – 
Alex Riley
18 Авг 2014 в 20:38