在MATLAB中,有沒有一種更簡潔的方式來處理列的離散條件索引比使用for循環?這裏是我的代碼:有沒有一種矢量化的方式來操作MATLAB中每列不同數量的值?
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循環?這裏是我的代碼:有沒有一種矢量化的方式來操作MATLAB中每列不同數量的值?
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);
你只是想在排除異常值後採取列的意思?你能詳細說明你正在努力完成什麼嗎? – linuxuser27 2010-09-18 01:58:40
我的目標是爲一系列運行中的每個運行取一組值的前x%的平均值。我有一個矩陣,每次運行都有一列數據,並使用prctile函數來確定每次運行的條件。儘管上面的代碼有效,但似乎可能有更簡潔的方式來完成此任務。 – user338714 2010-09-18 02:05:09