gpt4 book ai didi

matlab - 具有相同标签的列的平均值

转载 作者:行者123 更新时间:2023-12-03 17:03:28 25 4
gpt4 key购买 nike

我有两个向量

data vector: A = [1 2 2 1 2 6; 2 3 2 3 3 5]
label vector: B = [1 2 1 2 3 NaN]

我想取具有相同标签的所有列的平均值,并将它们输出为按标签编号排序的矩阵,忽略 NaN。所以,在这个例子中我想要:

labelmean(A,B) = [1.5 1.5 2; 2 3 3]

这可以通过这样的 for 循环来完成。

function out = labelmean(data,label)
out=[];
for i=unique(label)
if isnan(i); continue; end
out = [out, mean(data(:,label==i),2)];
end

但是,我正在处理包含许多数据点和标签的巨大数组。此外,此代码片段将经常执行。我想知道是否有更有效的方法来执行此操作而无需遍历每个单独的标签。

最佳答案

这是一种方法:

  1. 获取不包含 NaN 的标签的索引。
  2. 创建一个由 0 和 1 组成的稀疏矩阵,乘以 A 将得到所需的行总和。
  3. 将该矩阵除以每一列的总和,使总和成为平均值。
  4. 应用矩阵乘法得到结果,并转换为完整矩阵。

代码:

I = find(~isnan(B));                                 % step 1
t = sparse(I, B(I), 1, size(A,2), max(B(I))); % step 2
t = bsxfun(@rdivide, t, sum(t,1)); % step 3
result = full(A*t); % step 4

关于matlab - 具有相同标签的列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540444/

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