【发布时间】:2015-11-22 18:21:54
【问题描述】:
我有一个大的随机值矩阵(例如 200,000 x 6,000),介于 0-1 之间,名为“allGSR”。 我使用以下代码创建了一个逻辑数组 (?),其中 1 表示小于 0.05 的数字
sig = (allGSR < .05);
我想要做的是返回一个大小为 1 x 200,000 的数组,称为 maxSIG,其中每一行代表最大的连续数。因此,例如,如果在第 1 行中,第 3-6 列是 1,即一行中有 4 个,如果第 100-109 列是连续 10 个,如果这是一行中的最大数量我希望 maxSIG 的第一列是值“10”。
我一直在使用 for 循环、if 语句和计数器来执行此操作;这既丑陋又乏味,想知道是否有更简单或更有效的方法。
感谢您提供任何见解。
编辑:哎呀,应该共享循环。 编辑2:所以我只是用较小的(100 x 6,000)矩阵写出了我的基本代码。此代码应该运行。很抱歉给您带来不便。
GSR = 6000;
samples = 100;
allGSR = zeros(samples, GSR);
for x = 1:samples
y = rand(GSR, 1)'; %Transpose so it's 1x6000 and not 6000x1
allGSR(x,:) = y;
end
countSIG = zeros(samples,1);
abovethreshold = (allGSR < .05); %.05 can be replaced by whatever
for z = 1:samples
count = 0;
holdArray = zeros(1,GSR);
for a = 1:GSR
if abovethreshold(z,a) == true
count = count + 1;
else
count = 0;
end
holdArray(1,a) = count;
end
maxrun = max(holdArray);
countSIG(z,1) = maxrun;
end
【问题讨论】:
-
分享你的循环代码?
-
哎呀,抱歉遗漏了。已添加。
-
您能否列出实际
allGSR和其他相关输入的较小代表性版本以及自包含并使用它们运行的代码,并确保其输出符合预期。此外,在编辑后的代码中,samples是未定义的。基本上,我们正在寻找一个最小、完整和可验证的示例来展示您想要实现的目标。更多信息在这里 - stackoverflow.com/help/mcve -
您的机器上安装了 c++ 编译器吗?您是否愿意使用可以从 Matlab 调用的用 c++ 编写的 mex 函数?还是您正在寻找完全用 MATLAB 编写的答案?
-
我明白了。希望新块是所需要的。很抱歉造成误解。
标签: matlab conditional-statements sequence counter