matlab 如何找矩阵中的非零元素并替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 如何找矩阵中的非零元素并替换相关的知识,希望对你有一定的参考价值。

如,矩阵[1 0 0 0 1;1 0 0 1 0];要将其中的1元素按顺序替换为[2 4;3 5]

A = [1 0 0 0 1;1 0 0 1 0];
b = [2 4; 3 5];
ia = find(A(:)~=0);
A(ia)=b(:)

A =

     2     0     0     0     5

     3     0     0     4     0


%% 如果要对应行优先

A = [1 0 0 0 1;1 0 0 1 0]';
b = [2 4; 3 5]';
ia = find(A(:)~=0);
A(ia)=b(:);
A = A'

A =

     2     0     0     0     4

     3     0     0     5     0

参考技术A 设数组为a,a(find(a==0))=w,w就是你想替换的数。如果想替换的数是不相同的,那就用c=find(a==0),这个时候数组c里就存放了等于0的下标,你就可以进行赋值替换了,如:a(c(1))=1+i。 参考技术B temp=find(A~=0);
for i=1:1:length(temp)
A(temp(i))=你想要替换的值;
end

无迹卡尔曼滤波器协方差矩阵 P 中的非零元素

【中文标题】无迹卡尔曼滤波器协方差矩阵 P 中的非零元素【英文标题】:non-zero elements in the covariance matrix P of unscented kalman filter 【发布时间】:2021-05-10 18:06:00 【问题描述】:

我正在使用 filterpy.kalman 库的 unscented kalman 过滤器类。 即使当我用非对角线条目都为零的情况下初始化过程噪声 Q 和初始协方差 P 时,我仍然会得到具有非零非对角线条目的 P 和 S,有没有办法确保 P和 S 的非对角项都等于 0?

【问题讨论】:

【参考方案1】:

我怀疑您可能会在其他地方得到更好的答案,但我不确定在哪里。

只有在状态实际上是没有动态的独立一维状态的集合的情况下,您才能确保对角状态误差协方差矩阵(即在时间 t' 的状态的预测是在时间 t 的状态)并且没有任何测量涉及超过一个状态元素。

卡尔曼滤波器的本质是它估计状态误差之间的相关性。

【讨论】:

以上是关于matlab 如何找矩阵中的非零元素并替换的主要内容,如果未能解决你的问题,请参考以下文章

如何找出一个矩阵中每一行的非零元素的位置和数值

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

MATLAB中查找数组中的非零元素用啥函数

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

matlab中怎么查找一个数组中所有的非零元素的位置

用先前的非零值替换向量中的所有零