matlab - 用矩阵中的行索引替换非 NaN 值

标签 matlab matrix

我有 4x2 矩阵 A:

A = [2 NaN 5 8; 14 NaN 23 NaN]';

我想用 A 中每一列中的关联索引替换非 NaN 值。输出如下所示:

out = [1 NaN 3 4; 1 NaN 3 NaN]'; 

我知道如何手动为每一列执行此操作,但我想要一个自动解决方案,因为我要处理的矩阵要大得多。有人知道吗?

最佳答案

out = bsxfun(@times, A-A+1, (1:size(A,1)).');

工作原理:

  • A-A+1A 中的实际数字替换为 1,并将 NaN 保留为 NaN
  • (1:size(A,1)).' 是行索引的列向量
  • bsxfun(@times, ...) 将上述两者与单例扩展相乘。

正如 @thewaywewalk 指出的那样, Matlab R2016以后的bsxfun(@times...)可以替换成.*,因为单例扩展默认开启:

out = (A-A+1) .* (1:size(A,1)).';

@Dev-Il 建议的替代方案是

out = bsxfun(@plus, A*0, (1:size(A,1)).');

这是有效的,因为乘以 0 会将实际数字替换为 0,并保持 NaN 不变。

关于matlab - 用矩阵中的行索引替换非 NaN 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830936/

相关文章:

c++ - 图像数据矩阵中的偏移值及其对整数值的影响

matlab - MATLAB中的量化噪声

matlab - 在matlab中,是否可以将组织在文件夹中的类的方法放在子目录/子文件夹中?

java - Java 中的 Levenberg-Marquardt 最小化

matlab - 如何在先前在 MATLAB 中绘制的内容之上绘制数据点?

c++ - 获取和设置二维数组对象值 (C++)

python - MATLAB 多维矩阵到 NumPy 矩阵的转换

c++ - 独立代码生成不支持函数 'uigetfile'

c - 获取二维矩阵的相邻元素(仅限深度一)

r - 如何打乱矩阵或数据框中的值,使每个值在每一行/列中只出现一次?