M = [1007  1007  4044  1007  4044  1007  5002;
      552   552   300   552   300   552   431;
     2010  2010  1113  2010  1113  2010  1100;
        7    12    25    15    12    30     2]  

N = [1007  4044  5002;
      552   300   431;
     2010  1113  1100;
      1.2     5  2.14;
      5.3   2.1  2.03]

N(1:3,:) = unique(M(1:3,:)','rows')'

我的目标是将所有对应于N(1:3,i), i=1,2,3M(4,:)值放在单元格A一个向量中,如果abs(N(4,i)-N(5,i))>0.2*N(5,i)

A是要建立的单元

对于我的例子:

A = {[7 12 15 30],[25 12]}

[7 12 15 30]对应于N(1:3,1)

[25 12]对应于N(1:3,2)

第二个例子:

M = [1007  1007  4044  1007  4044  1007  5002 5002 5002 622 622;
      552   552   300   552   300   552   431  431  431 124 124 ; 
     2010  2010  1113  2010  1113  2010  1100 1100 1100  88  88;
        7    12    25    15    12    30     2   10   55  32  12];

N = [1007 4044 5002 622;
      552  300  431 124;
     2010 1113 1100  88;
       -1    2   -3   4;
      1.5  1.9  2.9 4.1];

A = {[7 12 15 30],[2 10 55]}

===============>>#1 票数:2 已采纳

使用unique的第三个输出参数进行类似的操作-

%// Find unique IDs for each column
[~,~,idx] = unique(M(1:3,:)','rows')          %//'

%// Accumulate elements from the fourth row of M based on the IDs
A = accumarray(idx(:),M(4,:).',[],@(x) {x})   %//'

%// Use mask corresponding to abs(N(4,i)-N(5,i))>0.2*N(5,i) and
%// filter out some of the cells from the output
A = A(abs(N(4,:)-N(5,:))>0.2*N(5,:))

对于给定的输入,我们得到-

>> celldisp(A)
A{1} =
    12
    30
    15
     7
A{2} =
    12
    25

如果您要查找'Stable'输出,则可以从此处使用accumarrayStable ,从而为我们提供-

>> celldisp(A)
A{1} =
     7
    12
    15
    30
A{2} =
    25
    12

  ask by bzak translate from so

未解决问题?本站智能推荐:

3回复

删除满足特定条件的单元格

我有一个单元阵列,每个单元是一个n×n矩阵。 我想删除inv(cell{i}'*cell{i})发出矩阵接近单数的警告的inv(cell{i}'*cell{i}) 。 谢谢
1回复

MATLAB:有条件地将元素矩阵化为两个单独的单元格数组

矩阵具有2行和几列,第一列包含1和0的交替字符串。 我想使用此二进制文件作为将其下面的信息复制到两个单元格数组之一的决定。 我知道可以通过使用IF条件语句或while循环通过迭代来完成,但是我在清理它时遇到了麻烦。 例如,对于 我想输出两个单元格数组,一个用于“ 1s”,一个用
1回复

从两个多维单元格创建多维矩阵

我有一个单元格f{k} ,其中有k矩阵,其中k=1:96 。 对于每个k ,矩阵具有不同的长度。 例如, length(f{1})==13和length(f{96})==80 。 另外,我还有另一个单元格W{k}其中k=1:96 。 同样,对于每个k ,矩阵具有不同的长度。 例如, l
2回复

在特定条件下如何从单个矩阵创建两个或多个矩阵?

您好,我是matlab的新手,无法弄清楚如何解决问题。 我有Matrix1: 和Matrix2: Matrix2表示在Matrix1中找到的链接(按它们出现的顺序)。 我想在每个块从停止点1开始的块(矩阵)中分离链接。因此,通过分析Matrix2,我应该生成2个新矩阵
2回复

如何根据其中一个矩阵中的值从两个矩阵中提取值?

我想知道以下最佳做法: 我有两个矩阵, a1 (500乘40)和a2 (1乘500)。 对于a1 ,它是布尔值,我想根据特定列中的值(即true或false)分离出数组。 我还需要在a2分隔相应的条目。 我可以通过几个循环来完成这个,或者甚至可以通过连接a1和a2 ,进行逻辑测试
2回复

搜索单元格数组中的特定矩阵

所以,我有这个单元格数组在每个单元格中包含nx 2矩阵。 这是示例数据: 我要做的是消除重复的矩阵(具有相同值或反向值的矩阵)。 在这种情况下为[17 18; 17 17](第5行),因为我们已经有[17 17; 17 18](第4行) 我尝试使用唯一函数,但它表示该函数仅
1回复

根据第二个矩阵中的条件在一个矩阵中提取值

我有以下问题:我说有100个3维点,并且具有所有点彼此相关的相关矩阵A,因此A的尺寸为100 x 100。 对于我所有的点,我都有另一个矩阵B,该矩阵具有每个点的坐标,因此B是3 x 100的矩阵。 现在,我要执行以下操作:从我的相关矩阵A中,我只想提取点的相关,其中该点的x坐标为0
3回复

索引矩阵到单元格矩阵

给定n个维度的矩阵,我如何将其转换为索引矩阵,如下所示:
2回复

如何在matlab中添加两个单元格

我有这样的B <1x3单元格: 我想添加一个<4x2 cell>像这样: 我这样尝试过: 我得到的是“矩阵尺寸必须一致”。 我该怎么做呢?
2回复

在矩阵的单元格数组中添加单元格

用于创建单元数组的代码取自: MATLAB中的矩阵数组 [感谢Hosam Aly!] 功能是: 我的代码: 我不能使用{:}(1,1)来引用所有矩阵。 使用循环时,Matlab发现使用{}一个意外的括号。 我想保持上面的格式为对角线。 我该怎么办?