【发布时间】:2014-05-20 14:40:07
【问题描述】:
我正在尝试制作一个自制版本的 peakfinder.m,使其与多个阵列一起工作,而不是一次只使用一个,以提高时间效率。 (http://www.mathworks.com/matlabcentral/fileexchange/25500-peakfinder)
我有一个 2D 矩阵,我需要在其中查找符号在 2 维中是否发生变化。
dx0 = diff(x0,1,2); % Find derivative
dx0(dx0 == 0) = -eps; % This is so we find the first of repeated values
ind = find(dx0(:,1:end-1).*(dx0(:,2:end)) < 0)+1; % Find where the derivative changes sign
现在我的问题是它确实找到了导数改变符号的位置,但它是一个大向量。因此,如果标志在同一行中发生两次变化(或没有连续变化),我无从得知。
因此,如果 x0 的大小为 1000x10,我希望 ind 的大小为 1000xY,其中 Y 是它在每行中更改符号的次数。我还需要知道 x0 的哪些值有符号变化。所以每一行的样式都是:
2 4 7
4 8
2 5 6 8
等等
这可能吗?或者我应该更改代码,如果它没有变化,它会放置一个 0,如果它发生变化,它会放置一个 1,考虑到我将使用它发生变化的值?
【问题讨论】:
-
你有
1 3。你怎么能有1,因为1的左边没有任何东西,因此那里不可能改变符号,或者那里?希望我没有做出任何荒谬的假设。或者1是否意味着一行的第二列与该行的第一列有符号变化? -
Arrr,我写错了乱码:P 你确实是对的,1 不可能发生!
-
编辑后才有意义! :)
-
完成后请务必运行基准测试。仅仅对矩阵而不是单独的向量进行操作可能不足以获得任何性能。
-
考虑到我的矩阵的实际大小是 264244x1000,我认为这种方式会比使用“for”循环更快。但我会记住这一点,谢谢!
标签: arrays matlab matrix indexing