MATLAB和Python中的整形和索引
我有一个Matlab代码,需要用Python翻译。这里的一点是,形状和索引非常重要,因为它与张量一起工作。我有点困惑,因为在python中使用MATLAB和Python中的整形和索引,python,arrays,matlab,reshape,tensor,Python,Arrays,Matlab,Reshape,Tensor,我有一个Matlab代码,需要用Python翻译。这里的一点是,形状和索引非常重要,因为它与张量一起工作。我有点困惑,因为在python中使用order='F'似乎就足够了。但当我处理3D数据时,我注意到它不起作用。例如,如果A是python中从1到27的数组 array([[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]], [[10, 11, 12], [13, 14, 15],
order='F'
似乎就足够了。但当我处理3D数据时,我注意到它不起作用。例如,如果A
是python中从1到27的数组
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]],
[[19, 20, 21],
[22, 23, 24],
[25, 26, 27]]])
如果我执行A.重塑(3,9,order='F')
我得到
[[ 1 4 7 2 5 8 3 6 9]
[10 13 16 11 14 17 12 15 18]
[19 22 25 20 23 26 21 24 27]]
在Matlab forA=1:27
中,重塑为[3,3,3],然后是[3,9],似乎我得到了另一个数组:
1 4 7 10 13 16 19 22 25
2 5 8 11 14 17 20 23 26
3 6 9 12 15 18 21 24 27
Matlab和Python中的SVD给出了不同的结果。那么,有没有办法解决这个问题
也许你知道在Matlab->python中操作多维数组的正确方法,比如我应该为arange(1,13)等数组获得相同的SVD吗?重塑(3,4)和Matlab 1:12->重塑(uz,[3,4]),或者正确的方法是什么?也许我可以在python中以某种方式交换轴,以获得与Matlab相同的结果?或者在Python中更改重塑(x1,x2,x3,…)
中的轴顺序 Matlab中的
A = 1:27;
A = reshape(A,3,3,3);
B = reshape(A,9,3)'
B =
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
size(B)
ans =
3 9
用Python
A = np.array(range(1,28))
A = A.reshape(3,3,3)
B = A.reshape(3,9)
B
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18],
[19, 20, 21, 22, 23, 24, 25, 26, 27]])
np.shape(B)
(3, 9)
我也有同样的问题,直到我找到这篇维基百科文章: Python(和C)按行的主要顺序组织数据数组。正如您在第一个示例代码中看到的,元素首先随列增加:
array([[[ 1, 2, 3],
- - - -> increasing
然后排成一排
array([[[ 1, 2, 3],
[ 4, <--- new element
(在matlab中)
load('A.mat')
A=排列(A[3 2 1]);%反序尺寸
整形(A,9,3)“%给出的结果与python中的A.reformate([3,9])相同
请注意,(9,3)和(3,9)是有意按相反的顺序排列的。在Matlab
中重塑(A,3,3,3)
给出与初始Python数组相同的结果。在MatlabA=1:27
中相当于A=np。数组(范围(1,28))
在Python中。在Matlab中,整形(A,3,3,3)与Python中的整形(3,3,3)是等价的。但是,如果我想将(3,3,3)数组重塑为(3,9),该怎么办?似乎元素的顺序不同,非常感谢您的解释!那么,从Matlab到python的“翻译”代码的正确方法是什么呢?在Matlab中,我们有重塑(A,[x1,x2,x3,…])
那么在python中,它应该是A.重塑(…,x3,x2,x1)
对吗?如果张量A是在python中创建的,是的。如果要将首先在matlab中创建的张量导入python(或反之亦然),则首先需要排列其维度(matlab中的permute()
,python中的np.moveaxis()
),然后按照您提到的方式进行重塑。
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[10, <-- new element in next page