如何将矩阵重塑为3D,但我发现MatLab会按列执行此操作

b1uwtaje  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(135)

我试着把一个python程序转换成matlab,我发现转置功能不能在matlab中实现。在Python中,它就是第一张图片。但在MatLab中,我发现它是按列阅读的,这与Python有很大的不同。而且我在MatLab中使用了CAT和Rehape函数,但我找不到一种方法来实现与在Python中相同的功能。[在此处输入图像描述][1]
例如,我在MatLab中创建了一个矩阵,并对其进行了重塑。但我发现它不是成排阅读的。

a = [1:1:100];
b = reshape(a,2,5,10);

我希望它可以按行而不是按列来划分。PYTHON的代码是

a = np.linspace(0,10*10-1,10*10)
b = a.reshape(10,10)
c = np.transpose(b[0::2],b[1::2],axes=(1,0,2))

所以我想知道有没有什么方法可以得到像在python中一样的结果?[1]:https://i.stack.imgur.com/kc4Er.jpg

jk9hmnmh

jk9hmnmh1#

要拥有相同的形状(在相同的索引元组将访问相同的元素的意义上),您应该使用:

a = 0:1:99;  % Note that your python code goes from 0 to 99, not from 1 to 100
b = reshape(a, 10, 10);
b = b';  % This puts b in a similar order as numpy would use, so it becomes easier to use;
c = permute(cat(3, b(1:2:end,:), b(2:2:end, :)), [1, 3, 2]);  % Equivalent to numpy transpose of the concatenated array on your python code

% Note that the way Matlab displays the matrices is different, but the indices are matching:
assert(c(1,1,1) == 0)
assert(c(1,1,2) == 1)
assert(c(1,2,1) == 10)
assert(c(1,2,2) == 11)
assert(c(2,2,2) == 31)

相关问题