Я продолжаю получать ошибку «индекс 3 выходит за пределы оси 1 с размером 3», но я уверен, что использую матрицу (3, n), а не (n, 3). Я не очень знаком с матрицами в python, поэтому я использовал своего рода хитрый способ придать им желаемую форму, чтобы я мог их умножать или складывать. Может ли кто-нибудь увидеть, где я ошибся, или предложить лучшую практику?
Я пытаюсь выполнить вращательное преобразование на A, сгенерированное через:
A = array(random.rand(3, 9));
, где A содержит a набор координат x, y, z в каждом столбце. Например:
Matrix A:
[[0.70799333 0.77123425 0.07271538 0.52498025 0.84353825 0.78331767
0.06428417 0.25629863 0.6654734 0.77562903]
[0.34179928 0.83233168 0.3920859 0.19819796 0.22486337 0.09274312
0.49057914 0.69716143 0.613912 0.04940198]
[0.98522559 0.71273242 0.70784866 0.61589377 0.34007973 0.34492078
0.44491238 0.37423906 0.37427018 0.13558728]]
преобразованная матрица вычисляется через A_translated = re_R. (Каждый столбец A) + ret_t, где
ret_R:
[[ 0.1928724 0.90776212 0.372516 ]
[ 0.27931303 -0.41473028 0.8660156 ]
[ 0.94062983 -0.06298194 -0.33353981]]
и
ret_t:
[[0.93445859]
[0.59949888]
[0.77385835]]
Моя попытка была следующей:
count = 0
num_rows, num_cols = A.shape
translated_A = pd.DataFrame( zeros( (num_rows, num_cols) ) )
print('Translated A: \n', translated_A)
for i in range(0, num_cols):
multiply = ret_R.A[:,i] # works up until (not including) i = 3
#IndexError: index 3 is out of bounds for axis 1 with size 3
print('Multiply: \n', multiply)
multiply2 = np.matrix(pd.DataFrame(multiply))
matrix = multiply2 + ret_t #works
matrix2 = pd.DataFrame(matrix) #np.matrix(pd.DataFrame(matrix)) # not working ?
print('Matrix:', matrix2)
translated_A[i] = matrix2[0]
print(translated_A)
Строка multiply = ret_R.A [:, i] работает только до тех пор, пока i = 3, не включая i = 3, что предполагает, что моя матрица A равна n, 3, но I ' м уверен, что это 3, н. Я продолжал переключаться между матрицами и фреймами данных, так как это работало, но не работало после i = 2.