MATLAB:根据规范从现有矩阵创建新矩阵

MATLAB:根据规范从现有矩阵创建新矩阵,matlab,matrix,Matlab,Matrix,假设我们有以下数据: H_T = [36 66 21 65 52 67 73; 31 23 19 33 36 39 42] P = [40 38 39 40 35 32 37] 使用MATLAB 7.0,我想创建三个具有以下特性的新矩阵: 矩阵H(矩阵H\u T中的第一部分)将分为3个间隔: 矩阵1:第一个间隔包含20到40之间的H值 矩阵2:第二个间隔包含40到60之间的H值 矩阵3:第三个间隔包含60到80之间的H值 重要的是,相应的T和p也将包含在它们的新矩阵中,这意味着H将根据

假设我们有以下数据:

H_T = [36 66 21 65 52 67 73; 31 23 19 33 36 39 42]
P   = [40 38 39 40 35 32 37]
使用MATLAB 7.0,我想创建三个具有以下特性的新矩阵:

矩阵
H
(矩阵
H\u T
中的第一部分)将分为3个间隔:

  • 矩阵1:第一个间隔包含20到40之间的
    H
  • 矩阵2:第二个间隔包含40到60之间的
    H
  • 矩阵3:第三个间隔包含60到80之间的
    H
重要的是,相应的
T
p
也将包含在它们的新矩阵中,这意味着
H
将根据上面定义的规范控制新矩阵

因此,所得矩阵将为:

H_T_1 = [36 21; 31 19]
P_1   = [40 39]

H_T_2 = [52; 36]
P_2   = [35]

H_T_3 = [66 65 67 73; 23 33 39 42]
P_3   = [38 40 32 37] 

事实上,这是一个简单的示例,根据规范创建新矩阵很容易,但在我的值中,有数千个数字,这使得创建新矩阵非常困难。

这里有一个快速解决方案

[~,bins] = histc(H_T(1,:), [20 40 60 80]);

outHT = cell(3,1);
outP = cell(3,1);

for i=1:3
    idx = (bins == i);
    outHT{i} = H_T(:,idx);
    outP{i} = P(idx);
end
然后访问矩阵,如下所示:

>> outHT{3}
ans =
    66    65    67    73
    23    33    39    42
>> outP{3}
ans =
    38    40    32    37

请注意,您在问题中没有指定如何处理这些范围之外的值,以及范围边界是否包含/排除??感谢您的答复,不幸的是,它给了我以下错误:???[~,bins]=histc(H_T(1,:,[20 40 60 80]);|错误:表达式或语句不完整或格式错误。当我写下“帮助垃圾箱”时,它给了我:垃圾箱。我找不到。我使用的是Matlab7.0,我认为这个版本中没有定义函数箱。事实上,这些值不是有界的,但我想知道如何处理这个问题,在我的实际数据中,H的最大值是100,最小值是1。我忘记了,只要用一个伪变量替换tilde
~
。在另一点上,它取决于您想要如何处理范围之外的值;上面的解决方案只是忽略了这些,但是您可以通过查找bins==0的元素轻松地恢复它们,非常感谢您的帮助。我的问题解决了。。谢谢顺致敬意,