Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在包含随机元素的字段的结构中选择单元格_Arrays_Matlab_Struct_Cells - Fatal编程技术网

Arrays 在包含随机元素的字段的结构中选择单元格

Arrays 在包含随机元素的字段的结构中选择单元格,arrays,matlab,struct,cells,Arrays,Matlab,Struct,Cells,如果有人能回答这个问题,我真的很感激。我问了很多人,但没有找到一个好的答案 DATA = struct ('Direction',{[1,1,1,1],[1,1,2,1],[2,2,2,2,2],[2,2,2,2,1,2],[2,2,2,2],[1,4,3,5,2]); 我有这样的结构,我使用以下代码来定义具有特定方向的代码: DATA = DATA(arrayfun(@(x) sum(x.Direction == 2) + 1 >= numel( x.Direction ), DAT

如果有人能回答这个问题,我真的很感激。我问了很多人,但没有找到一个好的答案

DATA = struct ('Direction',{[1,1,1,1],[1,1,2,1],[2,2,2,2,2],[2,2,2,2,1,2],[2,2,2,2],[1,4,3,5,2]); 
我有这样的结构,我使用以下代码来定义具有特定方向的代码:

DATA = DATA(arrayfun(@(x) sum(x.Direction == 2) + 1 >= numel( x.Direction ), DATA))
DATA = DATA(arrayfun(@(x) sum(x.Direction == 1) + 1 >= numel( x.Direction ), DATA))
例如,这将允许我仅选择方向为2的单元格,并允许使用一个不同的数字,如[2,2,2,2,1,2]

我只是想知道是否有办法选择具有随机方向的单元格?即[1,4,3,5,2](元素是随机的,可能包含也可能不包含1或2)

附言:


我不知道如何编写它,但我想有一个代码,可以比较矩阵元素,一个元素一个元素(就像我上面所说的),当到达一个不是1或2的元素时,它选择它为随机!这意味着随机矩阵可以有1和/或2,但代码应该跳过它,直到它到达非1或2元素

我想澄清一下:

我有三个条件

((1))字段的所有元素都是1,其中最大一个元素不是1,而是2

((2))或字段的所有元素都是2,其中最大一个元素不是2,而是1

((3))最后,元素是随机的,但它们仍然可以有许多1和2,这只是偶然的

选择“随机”是指选择第三类。我的代码适用于前两个类别,但对于第三个类别,它删除了一些实际上是随机的矩阵,但有多个元素是1和/或2,因为代码只允许一个不同的元素


谢谢。

鉴于类别3只是类别1或类别2中的而不是,我们可以通过几种方式确定哪些元素属于类别3。我们可以得到类别1和类别2的索引,并将它们从所有索引集中移除,或者我们可以反转用于选择类别1和类别2的逻辑

方法1

%// Category 2
cat2Indices = find(arrayfun(@(x) sum(x.Direction == 2) + 1 >= numel( x.Direction ), DATA));
DATA2 = DATA(cat2Indices);
%// Category 1
cat1Indices = find(arrayfun(@(x) sum(x.Direction == 1) + 1 >= numel( x.Direction ), DATA));
DATA1 = DATA(cat1Indices);
%// Category 3
cat3Indices = [1:length(DATA)];
cat3Indices = setdiff(cat3Indices, cat1Indices);
cat3Indices = setdiff(cat3Indices, cat2Indices);
DATA3 = DATA(cat3Indices);
这只保存前两个类别的索引,并计算这些索引与
数据中所有索引列表之间的设置差异

方法2

%// Category 2
DATA2 = DATA(arrayfun(@(x) sum(x.Direction == 2) + 1 >= numel( x.Direction ), DATA))
%// Category 1
DATA1 = DATA(arrayfun(@(x) sum(x.Direction == 1) + 1 >= numel( x.Direction ), DATA))
%// Category 3
DATA3 = DATA((arrayfun(@(x) sum(x.Direction == 1) + 1 < numel(x.Direction), DATA)) & ...
            (arrayfun(@(x) sum(x.Direction == 2) + 1 < numel(x.Direction), DATA)))
%//类别2
数据2=数据(数组风(@(x)和(x方向==2)+1>=numel(x方向),数据))
%//第一类
数据1=数据(数组风(@(x)和(x方向==1)+1>=numel(x方向),数据))
%//第3类
数据3=数据((arrayfun(@(x)和(x.Direction==1)+1

我已经将每个不等式从
=
改为
我不知道如何编写它,但我想有一个代码,可以比较矩阵元素,一个元素一个元素(就像我上面所说的),当到达一个不是1或2的元素时,它选择它为随机!这意味着随机矩阵可以有1和/或2,但代码应该跳过它,直到它到达非1或2元素。谢谢你“随机选择”是什么意思?我有3个条件((1))要么字段的所有元素都是1,最大一个元素不是1,而是2。((2))或字段的所有元素都是2,最大元素不是2,而是1((3)),最后元素是随机的,但它们仍然可以有许多1和2,这只是偶然的。选择“随机”是指选择第三类。我的代码适用于前两个类别,但对于第三个类别,它删除了一些矩阵,这些矩阵实际上是随机的,但有多个元素是1和/或2,因为代码只允许一个不同的元素。不是类别3只是类别1或2之外的任何元素吗?是的,但是我在做结构,我有限的知识说你可以减去结构,有没有办法?谢谢你,非常感谢。它工作得很好。关于最后一个注意事项,我的矩阵的设置方式是,对于前两个类别,一个可以不同的元素必须分别为2和1,因此代码适用于前两个类别,您的代码适用于第三个类别。非常感谢@烧杯