gpt4 book ai didi

MATLAB多维矩阵访问

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:52 24 4
gpt4 key购买 nike

SO成员(member)们新年快乐!

新年的第一篇文章,希望能得到一些好运! :D

我有一个 4D 矩阵 X,其大小为 100, 100, 100, 3。我用 X(51,:,51,:) 提取其子矩阵,并期望结果为 100x3 2D 矩阵。但是不,结果是一个大小为 1、100、1、3 的 4D 矩阵。怎么会??

一个更令人困惑的结果是:

  • 我可以将 plot(X(51,:,51,i)) 和 plot(X(:,51,51,i)) 与 i=1, 2, 3 一起使用

  • 不能使用具有相同 i 的 plot(X(51,51,:,i))

简而言之,MATLAB 子矩阵提取不会导致矩阵尺寸减小?并且不同的子访问行为不同,即对最后一个维度更加小心?

谢谢!

编辑01:

为方便起见,我将在此处显示单例和挤压的测试结果: sub matrix access

挤压的使用:

squeezed

最佳答案

正如您所注意到的,当您使用 (51, :, 51, :) 索引到您的 100 x 100 x 100 x 3 矩阵时,您会得到一个大小 [1 100 1 3] 的结果。 size = 1 的维度称为单例维度。

MATLAB 不会自动删除非尾随单维度(对于大于 2D 的矩阵)- 使用 squeeze消除这些维度。如果最后一个维度是单例,则会自动处理。

所以在你的情况下,你有

X = zeros(100,100,100,3);
Y = X(51,:,51,:); #% size(Y) = [1 100 1 3];
Y2 = squeeze(X(51,:,51,:)); #% size(Y2) = [100 3] - singletons removed

P1 = X(51,:,51,1); #% size(P1) = [1 100 1 1] which becomes [1 100] (2D)
P2 = X(51,51,:,1); #% size(P2) = [1 1 100 1] which becomes [1 1 100] (3D)

关于MATLAB多维矩阵访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com