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
和dTnx作为回答,是的,我完全理解,但这里的重点是所有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)