gpt4 book ai didi

Matlab:如何根据其他列中的条目汇总某个范围内的值

转载 作者:行者123 更新时间:2023-12-04 10:12:15 28 4
gpt4 key购买 nike

我对 Matlab 很陌生,无法解决以下问题:

我有三个列向量, “日期”、“名称”、“值”每个 300x1 和我需要总结 “值(value)观” (累积)在一定范围内不仅取决于向量 “姓名”还有向量 《日》 .

更准确地说,我想总结向量中的值 “值(value)观”对于每个类别(向量 “名称” )但仅针对某个范围(向量 “天” ),假设我想总结所有 “值(value)观” 开始《日》 2、 “结果” -vector 应该看起来像(缩短的例子):

| Day | Name | Values | Result |
|-----|------|--------|------------|
| 1 | A | 2 | 0 |
| 1 | C | 9 | 0 |
| 1 | B | 7 | 0 |
| 2 | D | 1 | 1 |
| 2 | B | 1 | 1 |
| 2 | A | 3 | 3 |
| 2 | D | 4 | 5 |
| 3 | D | 9 | 14 |
| 3 | B | 1 | 2 |
| 3 | C | 3 | 3 |
| 3 | A | 1 | 4 |
| 4 | D | 3 | 17 |

稍后我想更改范围,例如开始总结后 《日》 2、 《日》 3 等等,需要为起始“日”进行调整。

我的总和范围从 开始《日》 2 我创建了以下代码,但它根本不起作用:
Result = zeros(size(Values));
a=unique(Name);
for k=1:length(a)
for i = 1:length(Name)
if Day(i) > 1
Result(ismember(Name,a(k)))=cumsum(Values(ismember(Name,a(k))));
end
end
end

有没有人可以帮忙?
提前谢谢了!

最佳答案

我不认为功能ismember()是你在这里需要的。

尝试使用另一个数组来存储每个唯一的累积和 Name连同函数 find()像这样:

startDay = 2
NameList = unique(Name);
CumulSum = zeros(1, length(NameList)); % Array to store cumulative sum
Result = zeros(1, length(Name));

% For each row in the tabe
for row = 1:length(Name)

% Check condition on Day
if (Day(row) >= startDay)

% Compute the cumulative sum
% and store it in CumulSum array
indx = find(NameList == Name(row));
CumulSum(indx) = CumulSum(indx) + Values(row);

% Use the cumulative sum as result for the row
Result(row) = CumulSum(indx);

end
end

另外,使用 unique() 时要小心在字符数组上。您可能想要确保 Name 的元素是否存在是单个字符。

关于Matlab:如何根据其他列中的条目汇总某个范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61268663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com