gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:06 24 4
gpt4 key购买 nike

我有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com