【发布时间】:2016-08-05 12:37:57
【问题描述】:
以下 octave 代码显示了使用 Octave/Matlab 的示例 3D 矩阵
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 中的矩阵实现之间的区别,但我没有找到示例 3d 数组并将其映射到 Matlab 中,反之亦然!
答案是不同的,例如在 Matlab 中访问 element(1,3,2) 与使用 numpy (0,2,1) 的索引不匹配
Octave/Matlab
八度:6> A(1,3,2)
ans = 33
Python
>>> 数组[0,2,1]
8
【问题讨论】:
-
我相信 MATLAB 是
A(x,y,z)而 numpy 是A[z,y,x] -
@AnderBiguri 在 Python 中尝试,它看起来应该是
A[z,x,y],我认为x和y切换是因为行主要与列主要的区别 -
@Dan 是的,当然,你是对的。从技术上讲,更改是反向暗淡+交换
x,y,因为行/列主要。但是,这最后一个更改,我会将其添加到矩阵的 定义,而不是索引,因为这是所有 python 矩阵的创建方式 -
基本上有2个不同。 1)见我的第一条评论。 2)
A=[1 2; 3 4]在 numpy 中是A=np.array([[1, 3], [2, 4]])
标签: python arrays matlab numpy matrix