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的元素轻松地恢复它们,非常感谢您的帮助。我的问题解决了。。谢谢顺致敬意,