Matlab 如何在不编写FOR循环的情况下查看数组结构的所有元素?

Matlab 如何在不编写FOR循环的情况下查看数组结构的所有元素?,matlab,multidimensional-array,structure,Matlab,Multidimensional Array,Structure,我感兴趣的是看到以下内容中的所有元素: result(:,:).randMin(1:4,2:end) 其中结果(a=1:24,d=1:5) 一般来说,不使用循环和cat就可以访问它们吗?看起来您正在寻找: 我对这个命令有点生疏了,你可能需要玩一下它才能让它工作。 阅读它,祝你好运 看起来您正在寻找: 我对这个命令有点生疏了,你可能需要玩一下它才能让它工作。 阅读它,祝你好运 我认为这是不可能的,因为randMin对于结果中的每一个字段都可能是另一种东西。结果(1,1)。randMin可以是一个

我感兴趣的是看到以下内容中的所有元素:

result(:,:).randMin(1:4,2:end)
其中
结果(a=1:24,d=1:5)


一般来说,不使用循环和cat就可以访问它们吗?

看起来您正在寻找:

我对这个命令有点生疏了,你可能需要玩一下它才能让它工作。
阅读它,祝你好运

看起来您正在寻找:

我对这个命令有点生疏了,你可能需要玩一下它才能让它工作。
阅读它,祝你好运

我认为这是不可能的,因为randMin对于结果中的每一个字段都可能是另一种东西。结果(1,1)。randMin可以是一个矩阵,结果(1,2)。randMin可以是一个向量,结果(2,1)。randMin可以是四维的……你知道我要说什么了

因此,如果不遍历结果中的所有字段,就无法知道每个结果的randMin的维度或大小。如果有一个函数执行您想要的操作,那么它必须在内部使用循环,因此您也可以自己使用循环

编辑: 如果它是常量,您可以尝试以下方法:

%Generating matrix struct results(a,b).randMin(c,d)
dim1=24;
dim2=5;
dim3=128;
dim4=11;

% value=0;
% for i=1:dim1
%     for j=1:dim2
%         for k=1:dim3
%             for l=1:dim4
%                 results(i,j).randMin(k,l)=value;
%                 value=value+1;
%             end
%         end
%     end
% end


%Getting the values
range1=1:24;
range2=1:5;
range3=1:4;
range4=2:dim4;

myMat=[results(range1, range2).randMin];  
myContainer=reshape(myMat, dim3, dim4, length(range1), length(range2));
desiredValues=myContainer(range3, range4,:,:);
最后,desiredValues将具有您想要的值,但索引将切换到另一侧,而不是结果(a,b)。randMin(c,d)现在是desiredValues(c,d,a,b)


因为我不知道你的结构是什么样子,所以我将dim1到dim4定义为索引a到d的最大值。您可以使用range1到range4来选择所需的值。

我认为这是不可能的,因为对于结果中的每个字段,randMin都可能是其他值。结果(1,1)。randMin可以是一个矩阵,结果(1,2)。randMin可以是一个向量,结果(2,1)。randMin可以是四维的……你知道我要说什么了

因此,如果不遍历结果中的所有字段,就无法知道每个结果的randMin的维度或大小。如果有一个函数执行您想要的操作,那么它必须在内部使用循环,因此您也可以自己使用循环

编辑: 如果它是常量,您可以尝试以下方法:

%Generating matrix struct results(a,b).randMin(c,d)
dim1=24;
dim2=5;
dim3=128;
dim4=11;

% value=0;
% for i=1:dim1
%     for j=1:dim2
%         for k=1:dim3
%             for l=1:dim4
%                 results(i,j).randMin(k,l)=value;
%                 value=value+1;
%             end
%         end
%     end
% end


%Getting the values
range1=1:24;
range2=1:5;
range3=1:4;
range4=2:dim4;

myMat=[results(range1, range2).randMin];  
myContainer=reshape(myMat, dim3, dim4, length(range1), length(range2));
desiredValues=myContainer(range3, range4,:,:);
最后,desiredValues将具有您想要的值,但索引将切换到另一侧,而不是结果(a,b)。randMin(c,d)现在是desiredValues(c,d,a,b)


因为我不知道你的结构是什么样子,所以我将dim1到dim4定义为索引a到d的最大值。您可以使用range1到range4来选择所需的值。

您不能将[]技巧用于多级索引,但如果所有
randMin
都是128 x 11数组:

out = [result(1:24,1:5).randMin];
out = reshape(out,[128 11, 24, 5]);
out = out(1:4,2:end,:,:);

最终结果的大小为
4x10x24x5
,其中前两个是你的
randMin(1:4,2:end)
,最后两个维度分别是你的
a
d

你不能使用[]技巧进行多级索引,但如果所有
randMin
都是128 x 11数组:

out = [result(1:24,1:5).randMin];
out = reshape(out,[128 11, 24, 5]);
out = out(1:4,2:end,:,:);

最后的结果是
size
4x10x24x5
其中前两个是你的
randMin(1:4,2:end)
,最后两个维度分别是你的
a
d

Tnx作为回答,是的,我完全理解,但这里的重点是所有randMin都是相同的结果(a,d).randMin是(128 11)@Amir的数组。在本例中,您可以使用上面的代码。它生成一个与您的结构类似的结构,然后您可以选择要获得所需值的范围。我希望有帮助。最大大小称为dim1到dim4,您想要的范围称为range1到range4Tnx,我完全理解,但这里的要点是所有randMin都是相同的结果(a,d)。randMin是(128 11)@Amir的数组。在这种情况下,您可以使用上面的代码。它生成一个与您的结构类似的结构,然后您可以选择要获得所需值的范围。我希望有帮助。最大大小称为dim1到dim4,您想要的范围称为range1到range4tnx@Shai,但它只返回第一个(a,d)tnx@Shai,但它只返回第一个(a,d)