python - 使用 sympy 和 numpy 更改数组索引的问题

标签 python arrays numpy sympy

我有一个程序,应该输出绕任意轴旋转任意角度的旋转矩阵。我从一个空白的 3x3 numpy 数组开始。我使用嵌套循环遍历数组的每个元素,并根据 this awesome method 设置值。 .

在 sympy 中我使用 KroneckerDelta 和 LeviCivita,在 numpy 中我使用数组。

在我的代码中,我包含了我使用的故障排除方法。该程序的每一步行为都与我预期的完全一样,只是它似乎只是没有将值添加到组件中。更令人困惑的是,它适用于 theta=pi。

有人能发现我的愚蠢错误吗?

from numpy import array, ndarray, outer, dot, cross, array_equal, identity
from numpy import concatenate, zeros
from numpy import sin, cos, tan, arcsin, arccos, arctan, exp
from numpy.linalg import norm, inv
from numpy import pi, sqrt, arange
from sympy import KroneckerDelta, LeviCivita


def RotationMatrix(axis, angle):

    axis = axis / norm( axis )
    R = array([[0,0,0],[0,0,0],[0,0,0]])

    for i in range(0,3):
        for j in range(0,3):
            R[i,j] += int(cos(angle)) * int(KroneckerDelta(i,j))
            R[i,j] += (1-cos(angle)) * axis[i] * axis[j]
            for k in range(0,3):
                #R[i,j] -= sin(angle) * axis[k] * LeviCivita(i,j,k)
                print(KroneckerDelta(i,j),LeviCivita(i,j,k),i,j,axis[i],axis[j],cos(angle),sin(angle))
            print(R)

    return R

最佳答案

不确定哪个编辑造成了差异,但我做了以下操作:

-使用 numpy.zeros 而不是手工制作一个零数组

- 使用虚拟变量“Temp”临时保存要保存的值 添加到旋转矩阵

这是最终的代码:

#-v- You input an axis of rotation and an angle of rotation
# this outputs the corresponding rotation matrix
def RotationMatrix(axis, angle):

Temp = 0
axis = Normalized( axis )
R = zeros((3,3))#array([[0,0,0],[0,0,0],[0,0,0]])

for i in range(0,3):
    for j in range(0,3):
        Temp += cos(angle) * KroneckerDelta(i,j)
        Temp += (1-cos(angle)) * axis[i] * axis[j] 
        R[i,j] = R[i,j] + Temp
        Temp = 0
        for k in range(0,3):
            Temp -= sin(angle) * axis[k] * LeviCivita(i,j,k)
            R[i,j] = R[i,j] + Temp
            Temp = 0

return R
#-^-  

关于python - 使用 sympy 和 numpy 更改数组索引的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55755230/

相关文章:

python - 使用 scikit-learn 进行 ANOVA 测试的交叉验证特征选择

python - 使用 Python Ctypes 将结构指针传递给 DLL 函数

javascript - 将数组对象移动到数组中

python - 使用 Pandas 数据框按排序顺序输出排名

python - 理解 python 中生成器的执行顺序

Python:Selenium 无法单击 XPath 文本元素

arrays - 无法将值存储在数组中 - VBA

php - 滤波器阵列 - 奇偶

python - 如何将两个时间序列与间隙和不同的时基相关联?

python - 如何在Python中将直线方程添加到绘图上