octave:1> A=zeros(3,3,3);
octave:2>
octave:2> A(:,:,1)= [[1 2 3];[4 5 6];[7 8 9]];
octave:3>
octave:3> A(:,:,2)= [[11 22 33];[44 55 66];[77 88 99]];
octave:4>
octave:4> A(:,:,3)= [[111 222 333];[444 555 666];[777 888 999]];
octave:5>
octave:5>
octave:5> A
A =
ans(:,:,1) =
1 2 3
4 5 6
7 8 9
ans(:,:,2) =
11 22 33
44 55 66
77 88 99
ans(:,:,3) =
111 222 333
444 555 666
777 888 999
octave:6> A(1,3,2)
ans = 33
我需要使用numpy将同一个矩阵进行转换...不幸的是,当我尝试使用numpy中的数组访问相同的索引时,我得到了不同的值,如下所示!
import numpy as np
array = np.array([[[1 ,2 ,3],[4 ,5 ,6],[7 ,8 ,9]], [[11 ,22 ,33],[44 ,55 ,66],[77 ,88 ,99]], [[111 ,222 ,333],[444 ,555 ,666],[777 ,888 ,999]]])
>>> array[0,2,1]
8
我阅读了以下文档,其中展示了Matlab和Python numpy中矩阵实现的差异Numpy for Matlab users,但我没有找到一个三维数组的示例以及如何在Matlab和numpy之间进行相互映射!
例如,在Matlab中访问元素(1,3,2)与使用numpy(0,2,1)的相同索引不匹配。
Octave/Matlab
octave:6> A(1,3,2)
ans = 33
Python
>>> array[0,2,1]
8
A(x,y,z)
,而numpy则表示为A[z,y,x]
。 - Ander BiguriA[z,x,y]
,我认为x
和y
会交换位置,因为行优先和列优先的差异。 - Danx,y
,因为行/列主要。然而,我会将这个最后的更改添加到矩阵的定义中,而不是索引中,因为这就是所有 Python 矩阵的创建方式。 - Ander BiguriA=[1 2; 3 4]
在numpy中是A=np.array([[1, 3], [2, 4]])
。 - Ander Biguri