Ответ 1
Это просто квадрат каждого элемента.
from numpy import *
a = arange(4).reshape((2,2))
print a**2
печатает
[[0 1]
[4 9]]
У меня есть python ndarray temp в некотором коде, который я читаю, который страдает этим:
x = temp**2
Является ли этот квадрат точкой (т.е. эквивалентен m. * m) или квадрат матрицы (т.е. m должна быть квадратной матрицей)? В частности, я хотел бы знать, могу ли я избавиться от транспонирования в этом коде:
temp = num.transpose(whatever)
num.sum(temp**2,axis=1))
и превратите его в это:
num.sum(whatever**2,axis=0)
Это спасет меня хотя бы на 0,1 мс и, безусловно, стоит моего времени. Благодарю! Оператор ** не поддается сомнению, и я ничего не знаю! а
Это просто квадрат каждого элемента.
from numpy import *
a = arange(4).reshape((2,2))
print a**2
печатает
[[0 1]
[4 9]]
Вы должны прочитать NumPy для пользователей Matlab. Здесь упоминается элементная операция питания, и вы также можете видеть, что в numpy некоторые операторы применяются по-разному к array
и matrix
.
>>> from numpy import *
>>> a = arange(4).reshape((2,2))
>>> print a**2
[[0 1]
[4 9]]
>>> print matrix(a)**2
[[ 2 3]
[ 6 11]]
**
- это оператор повышения мощности в Python, поэтому x**2
означает "x квадрат" в Python - включая numpy. Такие операции в numpy всегда применяют элемент по элементу, поэтому x**2
квадратизирует каждый элемент массива x
(любое количество измерений), как, например, x*2
будет удваивать каждый элемент, или x+2
будет увеличивать каждый элемент на два (в каждом случае x
собственный не затрагивается - результатом является новый временный массив той же формы, что и x
!).
Изменить: как указывает @kaizer.ze, а то, что я написал для объектов numpy.array
, не относится к объектам numpy.matrix
, где умножение означает умножение матрицы, а не элемент по операции с элементами, например, для array
(и аналогично для повышения мощности) - действительно, что ключевое различие между этими двумя типами. Как добавляет Scipy tutorial, например:
Когда мы используем numpy.array или numpy.matrix есть разница. A * x будет в последней матрице случая продукт, а не элементный продукт, как с массивом.
i.e., поскольку ссылка numpy указывает:
Матрица представляет собой специализированный 2-мерный массив которая сохраняет свою двумерную природу через операции. Он имеет определенные специальные операторы, такие как
*
(матрица умножение) и**
(мощность матрицы).