在matlab上写了一段求皮尔逊的代码,如下:
subjfolder = dir('C:\Users\33796\Desktop\Data');
subjfolder(1:2) = [ ];
for subji =1:30
subname = double(subjfolder(subji).name);
data=load([subjfolder(subji).folder '' subname]);
for i=1:2290
for j=1:2290
[r,p]=corr(data(i,:),data(j,:),'type','pearson'); //这句报错说输入必须为单精度或者双精度浮点值,不知道怎么改
Pc(i,j)=r;
end
end
这个错误是因为corr函数需要输入的是单精度或双精度浮点数组,而不是整数数组。因此,您需要将data数组转换为浮点数数组,可以使用以下语句来实现:
data = double(data);
在您的代码中,您还使用了一个错误的语法,即在for循环中使用了for作为循环变量,请将其替换为正确的循环变量名称。
此外,您还有一个缩写错误,即subjfolder(subii),应该是subjfolder(subji)。
最终代码如下:
subjfolder = dir('C:\Users\133796\Desktop\Data');
subjfolder(1:2) = [];
for subji = 1:30
subname = double(subjfolder(subji).name);
data = load([subjfolder(subji).folder '' subname]);
data = double(data);
for i = 1:2290
for j = 1:2290
[r, p] = corr(data(i,:), data(j,:), 'Type', 'Pearson');
PC(i,j) = r;
end
end
end
subjfolder = dir('C:\Users\133796\Desktop\Data');
subjfolder(1:2) = [];
for subji = 1:30
subname = double(subjfolder(subji).name);
data = load([subjfolder(subji).folder '' subname]);
data = double(data);
for i = 1:2290
for j = 1:2290
[r, p] = corr(data(i,:), data(j,:), 'Type', 'Pearson');
PC(i,j) = r;
end
end
end
不知道你这个问题是否已经解决, 如果还没有解决的话:我们先生成一个测试数据(256张尺寸为256*256的渐变图)
data = zeros(256,256,256,'uint8'); % 注意:imwrite写GIF的时候,只支持uint8类型的数据
for k = 1:255
data(:,k+1,k+1) = k;
data(:,:,k+1) = data(:,:,k+1)+data(:,:,k);
end
写为动图
dt = 1/32;
imwrite(data(:,:,1),'test1.gif','LoopCount',Inf,'DelayTime',dt);
for k = 2:256
imwrite(data(:,:,k),'test1.gif','WriteMode','append','DelayTime',dt);
end
%%名称-值对组 'LoopCount',Inf 使动画连续循环。'DelayTime',1 在每个动画图像显示之间指定了一秒的时滞。'WriteMode':'append'追加模式
写为视频
fps = 32;
myVideo = VideoWriter('test1.avi');
myVideo.FrameRate = fps; %确定帧速率32
open(myVideo);%打开视频
for k = 1:256
writeVideo(myVideo,data(:,:,k)); %将视频数据写入到文件
end
close(myVideo);