我有矩阵A
,例如:
A = [1 2 3 NaN;
1 NaN 2 NaN;
NaN 2 3 4]
我想用预定义的值替换NaN
中的每个A
,例如我的列vector B
:
B = [2; 1.5; 3]
因此,对于第二行,我想获得一个新矩阵,其中此特定行中的每个NaN都被1.5
替换。它将在第一行2
和第三行3
。
除了循环遍历整个矩阵之外,还有更好的方法吗?我在for
和if
条件下使用else
循环。但是,此解决方案执行速度不快。
答案 0 :(得分:5)
以下是使用repelem
的解决方案(在R2015a中引入)。诀窍是根据B
每行NaN
出现的次数重复A
的条目。
req = A.';
req(isnan(req)) = repelem(B, sum(isnan(req)));
req = req.';
如果您还想计算B
,请使用mean
和'omitnan'
flag(在R2015a中引入),即
B = mean(A,2,'omitnan');
答案 1 :(得分:4)
您可以这样做:
is_NaN = find(isnan(A) > 0); % find index of NaNs
[I,~] = ind2sub(size(A), is_NaN); %transform from linear index to sub index
A(is_NaN) = B(I); % replace all using the row number of each found index
答案 2 :(得分:0)
你在这里:
$directory = explode('/', getcwd());
if( end($directory) == 'it' ){
//call Italian Module
}else{
//call English Module
}
由于您在谈论问题标题中的行均值,我认为不能手动定义向量A = [
1 2 3 NaN;
1 NaN 2 NaN;
NaN 2 3 4
];
B = [2; 1.5; 3];
B = repmat(B,1,size(A,2));
idx = isnan(A);
A(idx) = B(idx);
,而应该从您的B
矩阵计算出来。所以:
A