2016-07-14 2 views
1

У меня есть матрица вращения, и я использую .dot, чтобы применить ее к новым значениям. Как я могу применить его к каждой строке в массиве numpy?Python Numpy Применить матрицу вращения к каждой строке массива

Numpy массив выглядит следующим образом:

[-0.239746 -0.290771 -0.867432] 
[-0.259033 -0.320312 -0.911133] 
[-0.188721 -0.356445 -0.889648] 
[-0.186279 -0.359619 -0.895996] 

Хотите сделать что-то подобное, for each line in array, rotation_matrix.dot(line) и добавить каждую строку в новый массив

не слишком хорошо знакомы с Numpy, поэтому я уверен, что это что-то очень простое, что я просто не могу понять.

+0

Какая форма 'rotation_matrix'? Вы пишете какой-либо код для реализации этого псевдокода? Насколько я понимаю, вы можете попробовать: 'np.tensordot (rotation_matrix, input_array, axes = (1,1)) '. – Divakar

ответ

2

Умножение матрицы на матрицу вращения вращает все столбцы отдельно. Просто переставлять вперед, умножать и переставлять обратно, чтобы повернуть все строки:

a = np.array([ 
[-0.239746,-0.290771,-0.867432], 
[-0.259033,-0.320312,-0.911133], 
[-0.188721,-0.356445,-0.889648], 
[-0.186279,-0.359619,-0.895996], 
]) 

rot = np.array([ 
[0.67151763, 0.1469127, 0.72627869], 
[0.47140706, 0.67151763, -0.57169875], 
[-0.57169875, 0.72627869, 0.38168025], 
]) 

print a 

print "-----" 

for i in range(a.shape[0]): 
    print a[i, :] 

print "-----" 

for i in range(a.shape[0]): 
    print rot.dot(a[i, :]) 

print "-----" 

print rot.dot(a.T).T 
+0

То, что мне нужно, спасибо! :) – bhreathn711

0

Давайте предположим, что у вас есть вращение 3x3 матрицы R, и вы хотите, чтобы матрица умножения векторов с размером 3 строками ра из массива А, чтобы привести повернутые векторы Р.Б. с размером 3 в массиве B:

import numpy as np 

# Define numpy array. 
A = np.array([[-0.239746, -0.290771, -0.867432], 
       [-0.259033, -0.320312, -0.911133], 
       [-0.188721, -0.356445, -0.889648], 
       [-0.186279, -0.359619, -0.895996]]) 

# Define resulting zero array B. 
B = np.zeros(A.shape) 

# Loop over rows and determine rotated vectors. 
for ra,rb in zip(A,B): 
    rb = np.dot(R,ra) 
0
a.dot(rot) 

должны делать то, что вы хотите.

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

  • Нет связанных вопросов^_^