矩阵Matlab中的几个操作

时间:2016-01-10 17:36:35

标签: matlab matrix

我喜欢有matlab知识的人帮助我解决这个问题,计划是编写一个脚本如下enter image description here

它开始读取第2列上的数字,如果重复,则检入第3列: 条件是,如果第2列中的数字在第3列中重复多次第4列中的相应值如果在第3列中第2列 中的数字未重复或仅重复一次汇总 第4列中的相应值将保持不变。获得的值将在向量中生成。这些字母仅用于解释,这是一个尝试

的例子
data=[0   1    0     0
      1   2    1    200
      2   3    1    300
      3   4    1    400
      4   5    2    500
      5   6    3    600
      6   7    4    700
      7   8    5    800
      8   9    5    900
      9   10   5    1000
      10  11   6    1100
      11  12   7    1200
      12  13   7    1300];

v=[(200+300+400) 200 300 400 (800+900+1000)  600 (1200+1300)  800 900 1000 1100 1200 1300]

等待任何想法。谢谢你们的程序员!

1 个答案:

答案 0 :(得分:1)

如果我们解决您的问题,我们可以找到一种方法来获得您的答案。

基本上,对于第2列中的每个值(data(:,2)),我们创建一个逻辑矩阵,找到与第3列匹配的所有值(data(:,2)):

toinclude = data(:,3) == data(k,2)

现在我们需要查看有多少匹配

matches = sum(toinclude)

如果有<2个匹配,那么我们只需使用该值,否则我们将第4列中的所有值相加

if matches < 2
    value = data(k,4)
else
    value = sum(data(toinclude, 4));
end

我们希望对第2列中的所有元素执行此操作。

所有这些都可以写成for循环,但可能有单行解决方案。

output = zeros(size(data, 1), 1);

for k = 1:size(data,1)
    toinclude = data(:,3) == data(k, 2);

    if sum(toinclude) < 2
        output(k) = data(k, 4);
    else
        output(k) = sum(data(toinclude, 4));
    end
end

对于您提供的数据,这会产生以下结果

     900
     200
     300
     400
    2700
     600
    2500
     800
     900
    1000
    1100
    1200
    1300