я создал следующую трехмерную матрицу макета:Заменить значения с 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 в любой заданной ROW больше
1 - percentTickerAvailable
, замените все значения в этих конкретных строках на NaN. То есть, если недостаточно ресурсов, у которых есть цены в этой конкретной строке, полностью игнорируйте строку. - Если процентное количество NaN в любой заданной ROW меньше или равно
1 - percentTickerAvailable
, замените соответствующие NaN на-inf
.
Для того, чтобы быть ясно, «процент NaNs в любой данной строке» вычисляется следующим образом: Количество NaNs в любой данной строке, разделенной на число столбцов.
Скорректированный макете матрица должна выглядеть следующим образом:
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
Я уже успешно идентифицировал строки, соответствующие второму условию. Но я не знаю, как правильно использовать эту информацию для замены единственного NaN в mockup(2,2,2)
с помощью -inf
.
Любой совет приветствуется.
Lionel, вы несколько верны. Я перепутал эти два условия. Я редактировал свой оригинальный пост. – Andi
Скажите, будет ли мое решение работать для вас :) Я тестировал его на моем, и он работает! Просто сохраните свой код и добавьте в него одну строку! –