我的数据以某种形式出现,但我需要另一种形式。我已经尝试过reshape
和permute
,但是没有达到期望的结果。
A = {5 x 1}个单元格数组,其中每个单元格均为{300 x 18 single}
。
大小为18 x 300 x 1 x5的4D数组:
A( 1, 1,1,1) = 0.5
A( 1, 2,1,1) = 0.7
....
A( 1,300,1,1) = 0.8
...
A(18,300,1,1) = 0.99
...
...
...
A(18,300,1,5) = 0.89
(上面的值是随机的)
这是我的尝试,
z = cellfun(@(X) permute(X,[3 2 1]),A,'UniformOutput',false);
导致了
z =
5×1 cell array
{1×18×300 single}
{1×18×300 single}
{1×18×300 single}
{1×18×300 single}
{1×18×300 single}
答案 0 :(得分:2)
我认为permute
和reshape
是的发展之路。这是我的处理方式:
function z = q56764340(A)
if ~nargin
%% Generate some data:
A = reshape(num2cell(zeros(300,18,5,'single'), [1,2]),[], 1);
%{
A =
5×1 cell array
{300×18 single}
{300×18 single}
{300×18 single}
{300×18 single}
{300×18 single}
%}
end
%% Convert to a 4d numeric array:
z = permute( ... this does 300x18x1x5 -> 18x300x1x5
cell2mat( ... this does 1x1x1x5 -> 300x18x1x5
reshape(A,1,1,1,[])), ... this does 5x1 -> 1x1x1x5
[2,1,3,4]);
答案 1 :(得分:1)
您只需要提取每个单元格中的transpose。
z = cellfun(@transpose, A, 'un', 0);
您要寻找的是每个单元中的2D阵列。 18x300和18x300x1x1之间没有区别。每个数组都有无限的单例维度。
修改:
您似乎正在寻找尺寸为18x300x1x5的4D阵列。在这种情况下,请进一步使用:
z = cat(4, z{:});
第3维为1似乎在这里没有任何作用。最好使用尺寸为18x300x5的3D阵列。
z = cat(3, z{:});