python - Numpy 数组和 Matlab 矩阵不匹配 [3D]

标签 python arrays matlab numpy matrix

以下 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 中访问元素 (1,3,2) 与使用 numpy (0,2,1) 的相同索引不匹配

Octave /Matlab

Octave :6> A(1,3,2)

ans = 33

python

>>>数组[0,2,1]

8

最佳答案

在 numpy 中构造数组的方式与在 MATLAB 中不同。

您的 MATLAB 数组是 (y, x, z),您的 numpy 数组是 (z, y, x)。您的 3d numpy 数组是一系列“堆叠”二维数组,因此您正在索引“外部->内部”(因为缺少更好的术语)。这是扩展的数组定义,因此(希望如此)更有意义:

[[[1, 2, 3],
  [4, 5, 6],        # Z = 0
  [7 ,8 ,9]],
 [[11 ,22 ,33],
  [44 ,55 ,66],     # Z = 1
  [77 ,88 ,99]],
 [[111 ,222 ,333],
  [444 ,555 ,666],  # Z = 2
  [777 ,888 ,999]]
]

因此:

import numpy as np

A = 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]]])
B = A[1, 0, 2]

B 按预期返回 33

如果您想要一种更简单的方法来为您的数组建立索引,请考虑像在 MATLAB 中那样生成它。

关于python - Numpy 数组和 Matlab 矩阵不匹配 [3D],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789455/

相关文章:

java - 使用 jquery 中 servlet 中的 json 获取不同变量上的两个数组

Matlab:沿 3D 数组的第一维的操作

Python 应用程序崩溃并出现错误 "ImportError: pyexpat.x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt"

python - 提高加权移动平均过滤函数的运行时间?

python - 在 Pandas 的杂草中使用切片器进行多重索引

python - 使用 nltk 和 python 编写代码

java - 2D 数组中 3x3 的总和

javascript - 在 :value of <option> tag in vuejs 中使用 split()

python - Tensorflow 无法检测到我的 RTX 3050 笔记本 GPU

MATLAB 独立可执行文件