Matlab:从 LxMxN 数组中提取 LxN 数组
Matlab: Extract LxN array from LxMxN array
假设x=zeros(L,M,N)
。对于一个固定的组件,剩下的数组基本上就是一个矩阵。所以我应该能够做类似 y = x(:,2,:)
的事情。然后,我希望 y
是一个矩阵,即 LxN 数组。但是我得到了一个 Lx1xN 数组。
固定一个分量后,如何从三维数组中得到一个标准矩阵?我用matlab.
使用permute
在索引后重新排列维度:
x = zeros(2,3,4); % L×M×N
y = permute(x(:,2,:), [1 3 2]); % move 2nd dimension to 3rd
代码将二次元发送到最后。这将 L
×1
×N
数组转换为 L
×N
×1
数组,即 与 L
×N
矩阵相同,因为尾随单例维度 are ignored; in fact, arrays can be considered to have an infinite number 尾随单例维度。作为支票,
>> size(y)
ans =
2 4
提醒一句:有些人可能会想使用更简单的 y = squeeze(x(:,2,:))
,但这挤压了 all(非尾随)单例维度,而不仅仅是其次,因此它给出了 L=1
.
的 错误 结果
您可以使用 reshape
:
y = reshape(x(:,2,:), [L N]);
假设x=zeros(L,M,N)
。对于一个固定的组件,剩下的数组基本上就是一个矩阵。所以我应该能够做类似 y = x(:,2,:)
的事情。然后,我希望 y
是一个矩阵,即 LxN 数组。但是我得到了一个 Lx1xN 数组。
固定一个分量后,如何从三维数组中得到一个标准矩阵?我用matlab.
使用permute
在索引后重新排列维度:
x = zeros(2,3,4); % L×M×N
y = permute(x(:,2,:), [1 3 2]); % move 2nd dimension to 3rd
代码将二次元发送到最后。这将 L
×1
×N
数组转换为 L
×N
×1
数组,即 与 L
×N
矩阵相同,因为尾随单例维度 are ignored; in fact, arrays can be considered to have an infinite number 尾随单例维度。作为支票,
>> size(y)
ans =
2 4
提醒一句:有些人可能会想使用更简单的 y = squeeze(x(:,2,:))
,但这挤压了 all(非尾随)单例维度,而不仅仅是其次,因此它给出了 L=1
.
您可以使用 reshape
:
y = reshape(x(:,2,:), [L N]);