gpt4 book ai didi

matlab - 从数据中去除非周期性偏移的向量化,其中偏移值与数据存储在同一向量中

转载 作者:行者123 更新时间:2023-12-02 17:47:54 32 4
gpt4 key购买 nike

我有两个行数相同的列矩阵:

其中一个列矩阵(让我们称之为T)是一组按升序排序的非周期唯一整数。 T 可以通过以下方式模拟:

T=sort(randperm(10E6,100)) ;
T=T';

另一个列矩阵(我们称之为C)要么是0,要么是1,表示后续操作中T中相应行的状态。 0 发生的可能性比 1 小得多。C 可以通过以下方式模拟:

C=ones(100,1);
C(randperm(100,10))=0;

实际上,这些列矩阵将具有数百万个元素,并且这里的示例故意简短以提高测试速度。

我们单步执行C的每一行。如果 C 中的某个元素的值为 0,则将从每个 T 行中的所有后续值中减去 T 中相应的行值,直到我们在 C 中达到另一个 0。

我现在正在尝试对以下操作进行矢量化,以提高在数百万个元素矩阵上操作时的速度。

lastReset = 0;
newT = NaN*zeros(length(T),1);
for index = 1:length(C)
if C(index) == 0
lastReset = T(index);
else
newT(index) = T(index) - lastReset;
end
end
newT(C==0)=[];

如何向量化上面的 for 循环?

最佳答案

通常,像这样的“运行”操作的关键命令是使用 cumsum 的输出来索引数组:

inds = (C == 0);
subT = [0; T(inds)];
newT = T - subT(cumsum(inds)+1);
newT(inds) = [];

但是,至少在 R2010a(是的,旧的)上,它实际上比大 N 的循环,而对于较小的 N

不过,这更难理解。

关于matlab - 从数据中去除非周期性偏移的向量化,其中偏移值与数据存储在同一向量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40609105/

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