需要帮助以用于以下代码的循环实现

1次查看(最近30天)
Kevin Akash rajasekaran.
Kevin Akash rajasekaran. 2021年4月16日
回答: 沃尔特罗伯森 2021年4月16日
问候!我目前正在做一个项目,在这个项目中,我对一个刺激文件(.mat文件的花哨名字)执行一些操作。该文件包含多个试验,到目前为止,下面的代码能够一次成功地进行一次试验。我尝试用下面的方法自动化这段代码,但抛出了这个特殊的错误:
N维索索引仅允许完整的矩阵
任何人都可以帮助我调试代码。一整天都在烦恼(!)我仍然不确定我错了的地方。这是参考的代码:
函数地图= mkSaliencyMap (d, trialIds变长度输入宗量)
binsz = 0.1;
sdev = 2.0;
dt = 0.020;
为了Itrial =(试验机)
如果输入参数个数< 3
trialIds = 1: d.numTrials;
结尾
EyeData = D.Meta.Image.filename('时间',inf).data;
eye = d.eye(三分之二(itrial));
t0 = d.meta.cic.firstframe(“审判”,三分之二(Itrial));
%确定显示图像的开始和结束时间
(tstarttime、tr、框架、dta) = d.meta.image.startTime (“审判”,三分之二(Itrial));
[tstoptime,tr,frame,dta] = d.meta.image.stoptime(“审判”,三分之二(Itrial));
%删除图像显示前后的眼痕迹
眨眼= false(大小(eye.t));
闪烁=眨眼|眼睛。
闪烁=眨眼|眼睛> tstoptime-t0;
在情节中定义由于眨眼造成的畸形
(tstart、tr、框架、dta) = d.meta.edf.STARTBLINK (“审判”,三分之二(Itrial));
趋于d.meta.edf.endblink(“审判”,三分之二(Itrial));
%迭代每个眨眼数据点
Tstart = Tstart - t0 - dt
Tend = Tend - t0 + dt
如果最大(趋势)
tend = [tend, Inf];
结尾
如果min(tstart)> min(趋势)%必须缺少一个开始事件
tstart = [-inf,tstart];
结尾
断言(NUMER(TSTART)== numel(趋势),'startblink / endblink事件不匹配!');
为了itrial = 1:长度(tstart)
闪烁=眨眼|眼睛> tstart(itrial)&眼睛。<趋于(itrial);
结尾
%定义图像的原始尺寸
width = d.meta.image.width(“审判”,三分之一(Itrial),'时间'正). data
height = d.meta.image.height(“审判”,三分之一(Itrial),'时间'正). data
sz = ceil([高度,宽度] ./ binsz);持阳性图的大小
X0 =楼层(SZ(2)/ 2)+1;
Y0 =地板(SZ(1)/ 2)+1;屏幕中心坐标%
%删除为负整数的眼部
闪烁=眨眼|(CEIL(Eye.x / binsz)+ x0 <= 0)|(CEIL(Eye.x / binsz)+ x0> = sz(2));
闪烁=眨眼|(CEIL(EYE.Y / BINSZ)+ Y0 <= 0)|(CEIL(眼睛.Y / BINSZ)+ Y0> = SZ(1));
%为试验1的所有blink数据点分配NaN值
eye.x(眨眼)=南;
eye.y(眨眼)=南;
%创建一个稀疏矩阵的眼睛痕迹与眨眼删除
地图(:,:,itrial)=稀疏(CEIL(〜眨眼)/ binsz)+ y0,ceil(ey.x(〜blink)/ binsz)+ x0,1,sz(1),sz(2));
地图(:,:,itrial)=完整(地图(:,:,itrial));
地图(:,:,itrial)= Imgaussfilt(地图(:,:,itrial),sdev);具有stdev = 2的%高斯滤波器
结尾
结尾
3评论
沃尔特罗伯森
沃尔特罗伯森 2021年4月16日
输入是什么?
在错误时,在线上提到的每个变量的大小()是什么?

登录评论。

答案(2)


沃尔特罗伯森
沃尔特罗伯森 2021年4月16日
地图(:,:,itrial)=稀疏(CEIL(〜眨眼)/ binsz)+ y0,ceil(ey.x(〜blink)/ binsz)+ x0,1,sz(1),sz(2));
右边似乎是一个正常的稀疏数组。然而,稀疏数组不能分配给三维数组。例如
>>地图(:,:,1)=稀疏(1,1,1)
N维索索引仅允许完整的矩阵。
您将需要重新编码,例如
地图(:,:,itrial)= full(稀疏(ceil(tee.y(〜闪烁)/ binsz)+ y0,ceil(眼睛.x(〜blink)/ binsz)+ x0,1,sz(1),SZ(2)));
在这种情况下,您可以跳过下一行
地图(:,:,itrial)=完整(地图(:,:,itrial));%不再需要
顺便说一下,您无法在同一阵列中混合稀疏和完整。

标签

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!