我创建以下三维实体模型矩阵与NaN或Inf文件值:更换当满足某些条件
mockup(:,:,1) = ...
[100, 100, 100; ...
103, 95, 100; ...
101, 85, 100; ...
96, 90, 102; ...
91, 89, 99; ...
97, 91, 97; ...
105, 83, 100];
mockup(:,:,2) = ...
[50, NaN, NaN; ...
47, NaN, 40; ...
45, 60, 45; ...
47, 65, 45; ...
51, 70, 45; ...
54, 65, 50; ...
62, 80, 55];
我还定义percentTickerAvailable = 0.5
。
因此,各栏代表三种不同资产的股票价格。为了进一步处理,我需要按照以下方式操作NaN值。
- 如果任何给定行中NaN的百分比大于
1 - percentTickerAvailable
,则用NaN替换这些特定行中的所有值。也就是说,如果没有足够的资产在该行中具有价格,则完全忽略该行。 - 如果任何给定的ROW中NaN的百分比小于或等于
1 - percentTickerAvailable
,则用-inf
替换各自的NaN。
要清楚的是,“任何给定行中的NaNs百分比”计算如下: 任何给定行中的NaN数量除以列数。
调整后的实体模型矩阵应该是这样的:
mockupAdj(:,:,1) = ...
[100, 100, 100; ...
103, 95, 100; ...
101, 85, 100; ...
96, 90, 102; ...
91, 89, 99; ...
97, 91, 97; ...
105, 83, 100];
mockupAdj(:,:,2) = ...
[NaN, NaN, NaN; ...
47, -inf, 40; ...
45, 60, 45; ...
47, 65, 45; ...
51, 70, 45; ...
54, 65, 50; ...
62, 80, 55];
到目前为止,我做了以下内容:
function vout = ranking(vin, percentTickerAvailable)
percentNonNaN = 1 - sum(isnan(vin), 2)/size(vin, 2);
NaNIdx = percentNonNaN < percentTickerAvailable;
infIdx = percentNonNaN > percentTickerAvailable & ...
percentNonNaN < 1;
[~, ~, numDimVin] = size(vin);
for i = 1 : numDimVin
vin(NaNIdx(:,:,i) == 1, :, i) = NaN;
end
about = vin;
end % EoF
通过调用mockupAdj = ranking(mockup, 0.5)
这已经正确地转换在第一行mockup(1,:,2)
到{'NaN', 'NaN', 'NaN'}
。但是,我正在努力解决第二点。用infIdx
我已经成功识别出对应于第二个条件的行。但我不知道如何正确使用该信息来替换mockup(2,2,2)
中的单个NaN与-inf
。
任何提示高度赞赏。
莱昂内尔,你有点正确。我混淆了这两个条件。我编辑了我原来的帖子。 – Andi
告诉我,如果我的解决方案适合你:) 我在我的测试它,它的工作原理! 只需保留您的代码并添加一行即可! –