【发布时间】:2021-07-19 20:49:36
【问题描述】:
我想从一个从 excel 文件开始的 m x n 矩阵创建一个加权样本(“DataTab”,请参见图 1)。
第一列 (UGT) 表示矩阵的 ID,B-F 列表示与每个 UGT 的变量“fi”相关的概率。 “fi”是一个标量,其值为 10、20、30、40、50:这意味着 UGT 1101 有 50% 的概率具有值 10 或 20,UGT 1102 可以是 30 (50%) 或 40 ( 50%)等等。
我使用了仅适用于标量的“randsample 函数”,但我无法在我的情况下使用它。
fi = [10,20,30,40,50];
p = [0.15,0.20,0.30,0.10,0.25];
n=10000;
sample = randsample (fi, n, true, p);
hist(sample,fi);
bar(fi,n*p,0.7);
我将整个代码正确地与“Fv2”变量一起使用,而不是与“Fv1”一起使用,这是我的问题的目标。
Nsample = 10;
DataTab = xlsread('Scenari_stabilita_R6.xlsx','S1','A2:f6');
Ugt = csvread('raster_ugt.acs');
UgtV = reshape(Ugt,[],1);
MRas = [UgtV];
MCycle = MRas(~idxNaN,:);
a=unique(MCycle(:,4));
idxDataTab=ismember(DataTab(:,1),a);
DataTab2 = DataTab(idxDataTab,:);
nUGT = length(a);
fi = [10,20,30,40,50];
Fv = [];
for i = 1:nUGT
Fv1 = randsample (fi, Nsample, true, DataTab2(i,:));
%Fv2 = (DataTab2(i,3)-DataTab2(i,2)).*rand(Nsample,1) +
%DataTab2(i,2); % this line calculates uniform distribution and
%it has to be modified into weighted sampling
Fv = [Fv,Fv1];
end
“Fv1”变量必须是这样的(没有第一行,我仅作为示例显示以更好地理解):
有人可以帮帮我吗?
@obchardon 在R2019b版本上运行后我必须在这里回答:
enter image description here enter image description here
问题是“p”来自excel文件,所以不能写成标量。我怎样才能解决这个问题? 此外,第一列中“fi”的频率不考虑输入概率。使用此代码,频率得到尊重,但您应该以某种方式更改每个 ugt 的“p”。
sample = randsample (fi, n, true, p)
【问题讨论】:
标签: matlab matrix random probability sampling