在 MATLAB 中,有没有比使用 for 循环更简洁的方法来按列处理离散条件索引?这是我的代码:
x=[1 2 3;4 5 6;7 8 9];
w=[5 3 2];
q=zeros(3,1);
for i = 1:3
q(i)=mean(x(x(:,i)>w(i),i));
end
q
我的目标是取每列的一组值的前 x% 的平均值。上面的代码有效,但我只是想知道是否有更简洁的方法来做到这一点?
在 MATLAB 中,有没有比使用 for 循环更简洁的方法来按列处理离散条件索引?这是我的代码:
x=[1 2 3;4 5 6;7 8 9];
w=[5 3 2];
q=zeros(3,1);
for i = 1:3
q(i)=mean(x(x(:,i)>w(i),i));
end
q
我的目标是取每列的一组值的前 x% 的平均值。上面的代码有效,但我只是想知道是否有更简洁的方法来做到这一点?
我不知道以您想要的方式索引列的任何方法。这可能比 for 循环更快,但它也会创建一个大小为 x 的矩阵 y。
x=[1 2 3;4 5 6;7 8 9];
w=[5 3 2];
y = x > repmat(w,size(x,1),1);
q = sum(x.*y) ./ sum(y)
我并不认为这更简洁。
这是解决原始问题的一种方法:您有一个数组,并且您想知道每列顶部 x% 的平均值。
%# make up some data
data = magic(5);
%# find out how many rows the top 40% are
nRows = floor(size(data,1)*0.4);
%# sort the data in descending order
data = sort(data,1,'descend');
%# take the mean of the top 20% of values in each column
topMean = mean(data(1:nRows,:),1);