当前位置: 首页 > 知识库问答 >
问题:

在Matlab中,如何在一定条件下求结构矩阵之间的值之和?

卜高超
2023-03-14

我是matlab新手,不熟悉矩阵数组。我有很多矩阵nx6:

<26x6 double>
<21x6 double>
<27x6 double>
<36x6 double>
<29x6 double>
<30x6 double>
 ....

每个矩阵都属于这种类型:

>> Matrix{1,1}

A   B   C   D    E                  F
1   2   6   223  735064.287500000   F11
2   3   6   223  735064.288194445   F12
3   4   6   223  735064.288888889   F13
4   5   6   223  735064.290277778   F14

>> Matrix{2,1}

A   B   C   D    E                  F
1   2   6   223  735064.700694445   F21
2   3   6   223  735064.701388889   F22
3   4   6   223  735064.702083333   F23
4   5   6   223  735064.702777778   F24

>> Matrix{3,1}

A   B   C   D    E                  F
1   2   7   86  735064.3541666666   F31
2   3   7   86  735064.3548611112   F32
3   4   7   86  735064.3555555555   F33
4   5   7   86  735064.3562499999   F34
5   6   7   86  735064.702777778    F35

>> Matrix{4,1}

A   B   C   D    E                  F
1   2   7   86   735064.3569444444  F41
2   3   7   86   735064.3576388888  F42
3   4   7   86   735064.3583333333  F43
4   5   7   86   735064.3590277778  F44
5   6   6   86   735064.702777778   F45

其中E和F是datenum格式的日期。具体来说,F是时间差。

同时考虑所有矩阵,我想在列A、B、D中具有相等值的所有矩阵中求和列F的值。

对于D列的每个值(总线数),我想得到一个新的矩阵,如下所示:

A   B   C   D    H
1   2   6   223  F11+F21
2   3   6   223  F12+F22
3   4   6   223  F13+F23
4   5   6   223  F14+F24


A   B   C   D   H
1   2   7   86  F31+F41
2   3   7   86  F32+F42
3   4   7   86  F33+F43
4   5   7   86  F34+F44
5   6   7   86  F35+F45

提前感谢您的帮助!

共有1个答案

潘琪
2023-03-14

这种方法应该可以让你开始。我建议建立一个矩阵来存储1、2和4列之间的比较。基于这个矩阵,你可以生成你的输出矩阵。
下面是一个例子(请注意我更改了矩阵{1,1}的第3行):

Matrix{1,1} = [ ...

1   2   6   223  735064.287500000   1;
2   3   6   223  735064.288194445   2;
3   4   6   223  735064.288888889   3;
4   5   6   223  735064.290277778   4];

Matrix{2,1} = [ ...

1   2   6   223  735064.700694445   10;
2   3   6   223  735064.701388889   10;
2   4   6   223  735064.702083333   10;
4   5   6   223  735064.702777778   10];

COMP = Matrix{1,1}(:,[1:2 4])==Matrix{2,1}(:,[1:2 4]);

a = 1;

for i=1:size(Matrix{1,1},1)
    if sum(COMP(i,:)) == 3
        SUM{1,1}(a,1:5) = Matrix{1,1}(i,1:5);
        SUM{1,1}(a,6) = Matrix{1,1}(i,6) + Matrix{2,1}(i,6);
        a = a + 1;
    end
end

当比较列1、2和4时,矩阵COMP矩阵{1,1}矩阵{2,1}中相同的每个元素存储1
这将if-语句简化为检查一行中的所有元素是否一致(因此sum==3)。如果满足该条件,将生成一个新矩阵(SUM{1,1}),该矩阵将第6列中的条目相加,在这种情况下:

 SUM{1,1}(:,6) = 

     11
     12
     14
 类似资料:
  • 我有几个矩阵,每个矩阵的列数相同,但行大小不同。每个矩阵都包含正值和负值。为了分组(因为有很多矩阵),每个矩阵都存储在一个2D单元数组中。举个小例子: 我试图将这些值规范化到-1到1的范围,以列方式,跨矩阵的方式。所以,使用这个例子,我得到了每列的最大值和最小值,并将它们放在两个向量中: 我现在如何应用最大值和最小值来规范化所有矩阵的每一列? 我使用以下代码获取最大值和最小值: 有人能帮我根据需要

  • 你好,我是matlab新手,我不知道如何解决问题。 我有: 和Matrix2: Matrix2按照链接出现的顺序表示在Matrix1中找到的链接。 我想在块(矩阵)中分离链接,每个块从停止1开始。因此,通过分析矩阵2,我应该产生两个新的矩阵,一个是链接(1,2)(2,3)(3,4),另一个是链接(1,2)(2,3)(3,4)(4,5)。所以每次我找到stop 1,它就会开始构建一个新的矩阵 我希望

  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 主要内容:引用矩阵中的元素,删除矩阵中的一行或一列,矩阵运算,以下是纠正/补充内容:矩阵是数字的二维数组。 在MATLAB中,可以通过在每行中输入元素来创建一个矩形,以逗号或空格分隔数字,并使用分号标记每一行的结尾。 例如,创建一个矩阵 - MATLAB将执行上述语句并返回以下结果 - 引用矩阵中的元素 要引用矩阵的第行和第列中的元素,可以这样书写 - 例如,要引用矩阵的第行和第列中的元素,如上一节所述,可以这样书写 - MATLAB执行上述语句并返回以下结果 - 要引用第列中的

  • 我有30个矩阵(1446x1124),包含从0到99的值。我想有一个输出矩阵,具有相同的大小,并且在每个单元中包含该矩阵的一个元素(例如2)在30个输入矩阵上的输出频率(在0和1之间)。

  • 我在matlab中有一大堆2D矩阵(假设它们组成一个3D矩阵,其中第三维是时间),我试图从图像数据中制作视频。 我知道我可以使用surf()使用其中一个2D矩阵绘制曲面图,但我不确定调用哪个命令来获取所有2D矩阵并将其转换为曲面图的视频。 有人能帮忙吗?