2010-11-29 4 views
3

Я работаю с NumPy array, но иногда мне нужно умножить их на массивы.NumPy: лучший способ умножить матрицу на массив?

Прямо сейчас, я делаю что-то вроде:

rotation_matrix = np.matrix([ ... ]) 
for vector in vectors: 
    rotated_vec_mat = vector.T * rotation_matrix 
    vector[:] = np.array(rotated_vec_mat)[0] 

Но это некрасиво (и медленно?).

Есть ли более чистый способ сделать это?

ответ

3

может сделать больше смысла, чтобы сделать это:

vector_arr = np.concatenate([vector[np.newaxis, :] for vector in vectors], axis=0) 
rotated_vector_arr = np.dot(vector_arr, rotation_matrix) 

Тогда строки rotated_vector_arr то, что вы хотите, чтобы они были. Вы можете обрабатывать все это как один матричный продукт и выполнять цикл в C/Fortran библиотекой BLAS.

Нет необходимости использовать класс matrix() для матричного умножения, массивы работают нормально. matrix() перегружает оператор *, но я нахожу, что это просто путает вещи.

+0

Хм ... Я не понимаю. Что делает вызов `np.concatenate`? Например, если `vector = np.array ([1,2,3])`, `np.concatenate (vector [np.newaxis,:], axis = 0)` просто возвращает `np.array ([1,2 , 3]) `. – 2010-11-30 22:05:31

Смежные вопросы