Matlab 循环矩阵误差
我正在写一些Matlab代码来分析尖峰和它们的刺激。在代码的第一部分,我得到了一个尖峰的时间,然后找到屏幕上显示的帧。然后,我想从该帧获取图像数据,并将其添加到我自己的电影数据中。Matlab 循环矩阵误差,matlab,for-loop,matrix,add,Matlab,For Loop,Matrix,Add,我正在写一些Matlab代码来分析尖峰和它们的刺激。在代码的第一部分,我得到了一个尖峰的时间,然后找到屏幕上显示的帧。然后,我想从该帧获取图像数据,并将其添加到我自己的电影数据中。myMovie和moviedata的x和y分量都是128x128,但是当我尝试将刺激moviedata(:,:,j)的某一帧的图像值添加到我的电影myMovie(:,:,k)中的特定帧时,我得到“错误:矩阵维度必须一致”。有办法解决这个问题吗 代码: find可能返回一个空矩阵,因此j也将为空。 在这种情况下,命令my
myMovie
和moviedata
的x和y分量都是128x128,但是当我尝试将刺激moviedata(:,:,j)
的某一帧的图像值添加到我的电影myMovie(:,:,k)
中的特定帧时,我得到“错误:矩阵维度必须一致”。有办法解决这个问题吗
代码:
find
可能返回一个空矩阵,因此j
也将为空。在这种情况下,命令
myMovie(:,:,k)+double(moviedata(:,:,j))
尝试将128x128x1矩阵与128x128x0矩阵相加,从而得出错误。可能是因为find
在函数中查找多个满足条件的值。尝试通过执行ind=find(…,1)只查找一个值代码>,指定第二个参数1以仅查找一个匹配项。使用一些打印调试语句并查看j
是什么。我的直觉是,j
是不止一个值,因此当你试图引用你的moviedata
结构时,你访问的是不止一个片段,这就是为什么你会得到维度错误。另外:myMovie
和moviedata
都是3D矩阵吗?将参数添加到find
仍会导致错误消息myMovie
为128x128x25,moviedata
为128x128x18000。您确定j
为您提供了一个值吗?这是代码中唯一允许MATLAB给出错误的地方。我只说一件事。这应该是解决问题的最好办法。此外,代码似乎不稳定。如前所述,find
将返回满足条件的所有值。如果查找将返回一个以上的值,并且只期望返回一个值,则应该考虑是否有其他代码出错。如果find只返回一个值,则必须使用调试器检查矩阵的大小。另外,j
是小于18000的整数值吗?如果j
是整数,为什么需要舍入?(t-(1/(25*10))
曾经是一个整数值吗?t
是否有一个有限的十进制值?否则你什么也找不到。时间戳似乎来自您的设备,但这并不意味着它是1/f的倍数,其中f是您设备的采样频率。
for n=1:1100
t = blocks(5).spikes{1}(:,n);
for k=1:25
ind = find(round(double(blocks(5).frameEpocs*1000)/1000) == (t-(1/(25*10))));
j = blocks(5).frameEpocs(1,ind);
myMovie(:,:,k) = myMovie(:,:,k) + double(moviedata(:,:,j));
end
end