我是MATLAB的初学者。我创建了一个读取类型为JPG(相同文件类型)但每个文件的大小不同的数据集文件的代码。我所做的是随机读取10个文件,并将这些文件的内容放入一个名为'fr'的矩阵(带有单元格数组的类型)中(如下所示)。这个'fr'包含10列,这意味着10个文件被读取。我提取(读取)的文件的内容是二进制文件字节(0-255)但是,我提取了每个文件的内容并将它们放入一个名为'out1'的变量,但问题是如何使用不同的文件访问这些内容每个文件的大小,我已经通过使用函数(cellfun)解决了它,我通过添加零填充空白单元格。 最终,矩阵起作用了,但我现在面临的问题是如何从读取的整个文件中减去这个矩阵'out1'?我被困在这一部分。这个错误说矩阵尺寸必须一致:正如最后解释的那样。如何解决矩阵尺寸的协议
这是输出: ???错误使用==>减去 矩阵尺寸必须一致。
Error in ==> PCATEST2 at 50
B = (out1 - repmat(AMean,[n 1]))/repmat(AStd,[n 1]);
EDU>> whos
Name Size Bytes Class Attributes
AMean 1x10 80 double
AStd 1x10 80 double
ans 1x1 8 double
f 1x57 114 char
fid 1x1 8 double
files 50x1 32870 struct
fr 1x10 6715472 cell
i 1x1 8 double
j 1x1 8 double
m 1x1 8 double
maxLength 1x1 8 double
n 1x1 8 double
out1 101077x10 8086160 double
ridx 50x1 400 double
st1 1x10 1460 cell
此代码:
f ='/Users/nsa/Documents/MATLAB/jpg-data1/';
files = dir(fullfile(f,'*.jpg'));
ridx = randi(numel(files),size(files)); %choose files from f randomly
for i = 1:10 %randomly pick 10 files
st1(i) = {files(ridx(i)).name};
for j= i:length(st1)
fid = fopen(fullfile(f, st1{i}),'rt');
fr{j} = fread(fullfile(fid));
fclose(fid);
end
end
maxLength=max(cellfun(@(fr)numel(fr),fr));
out1 = cell2mat(cellfun(@(fr)cat(1,fr,zeros(maxLength-length(fr),1)),fr,'UniformOutput',false));
[n m] = size(fr);
AMean = cellfun(@mean,fr);
AStd = cellfun(@std,fr);
B = (out1 - repmat(AMean,[n 1]))/repmat(AStd,[n 1]);
??? Error using ==> minus
Matrix dimensions must agree.
Error in ==> TEST2 at 50
B = (out1 - repmat(AMean,[n 1]))/repmat(AStd,[n 1]);
谁能帮助我,引导我解决和克服这种错误?
你可以复制并粘贴运行'whos'的输出? – JesseBikman
输出字符太长。我会把它分成几部分。 – user2341531
我只是把问题的开头的输出 – user2341531