MATLAB中的每个列数量的不同数量值是否有矢量化方法?
-
03-10-2019 - |
题
在MATLAB中,是否有一种更简洁的方法来处理列的离散条件索引,而不是使用for a loop?这是我的代码:
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%的平均值。以上代码有效,但我只是想知道是否有一种更简洁的方法?
其他提示
我不知道有任何方法可以按照您想要的方式索引列。这可能比用于循环的速度快,但它也会产生一个矩阵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);
不隶属于 StackOverflow