我喜欢有matlab知识的人帮助我解决这个问题,计划是编写一个脚本如下
它开始读取第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]
等待任何想法。谢谢你们的程序员!
答案 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