如何在Python中访问3d矩阵的每个元素

2024-06-26 18:02:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个3d矩阵:

[[ 0.99742808 0.01090133 0.07084053] 
[-0.00373406 0.99492706 -0.10052965] 
[-0.07157707 0.10000657 0.99240889]] 

我想做一个函数来计算它的旋转角度,但是,我怎么才能得到a11或a12,等等。zip(*matrix)在2d数组上工作,但这是一个3d数组。因为我正在处理另外4个矩阵,所以我不想每次都输入用于计算的数字。有没有更简单的方法

使用此函数,我计算了旋转矩阵:

def rotation_matrix(a,b):
    v = np.cross(a, b)
    sine = np.linalg.norm(v)
    cos = np.dot(a, b) 
    vx = np.array([[0, -v[2], v[1]], [v[2], 0, -v[0]], [-v[1], v[0],0]])
    R = np.eye(3) + vx + (np.dot(vx,vx) * (1-cos)/(sine**2) )
    print(R)

运行以下命令:

matrix = rotation_matrix(vector_1, vector_2)

其中:

vector_1: (0.04105606809655358, 0.04476372266923052, 0.9981535996054132) 
vector_2: (0.11214819423654286, -0.05596069534201273, 0.9921145010059682) 

我的输出:R:

[[ 0.99742808 0.01090133 0.07084053] 
[-0.00373406 0.99492706 -0.10052965] 
[-0.07157707 0.10000657 0.99240889]] 

现在要查找euler的角度:

angle_x = math.atan2(r32,r33 )
angle_y = math.atan2(-(r31), np.sqrt(r32**2 +r33**2))
angle_z = math.atan2(r21,r11)

我手动输入值,得到:

θ_x = 0.10043249283304505 
θ_y = 0.07163832967532544 
θ_z = -0.003743670977871371

所以我只想知道如何从矩阵中调用r32 r31


Tags: 函数np矩阵math数组cosmatrix角度
1条回答
网友
1楼 · 发布于 2024-06-26 18:02:33

好的,首先,您给出的数据是一个2D数组,而不是一个3D数组

区别如下:

一维阵列

    array = [0,1,2,9,6,5,8] 

索引1处的数组的值为1。索引3处的数组的值为9。如果要将数组中的第三个值更新为8,则应执行以下操作

    array[2] = 8

二维数组就是数组的数组。因此,必须给出两个参数才能访问单个值

    two_dim_array = [[1,2,3],[4,5,6],[7,8,9]]

如果要更新“second”值,必须执行以下操作

    two_dim_array[0][1] = 'something'

这是因为two_dim_array[0]是一个一维数组,您仍然需要指定一个索引来访问一个值

从现在起,你可以用同样的推理继续深入。因为任何进一步的维度都是列表中的另一个级别。所以三维阵列应该是:

    3d_array = 
    [
        [
            [1,2,3,4],
            [5,6,7,8]
        ],
        [
            [9,10,11,12],
            [13,14,15,16]
        ]
    ]

现在要访问您必须给出的值。。3个参数。因为

    3d_array[0] // is a two-dim array
    3d_array[0][1] // is a one-dim array
    3d_array[0][1][0] // is a value

因此,如果必须调用每个元素,可以使用嵌套for循环


   for i in range(a): #a is number of sheets
       for j in range(b): #number of rows
            for k in range(c): #number of columns
                print(a[i][j][k])

相关问题 更多 >