Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何确定矩阵维数的一致性_Matlab_Matrix_Matlab Guide - Fatal编程技术网

Matlab 如何确定矩阵维数的一致性

Matlab 如何确定矩阵维数的一致性,matlab,matrix,matlab-guide,Matlab,Matrix,Matlab Guide,我是MATLAB的初学者。我创建了一个代码,用于读取类型为JPG(相同文件类型)但每个文件大小不同的数据集文件。我所做的是随机读取10个文件,并将这些文件的内容放入一个名为“fr”的矩阵(带有单元格数组类型)(如下所示)。此“fr”包含10列,表示读取了10个文件。我提取(读取)的文件内容是二进制文件字节(0-255)。然而,我提取了每个文件的内容,并将其放入一个名为“out1”的变量中,但问题是如何访问每个文件具有不同文件大小的内容,我已经使用函数(cellfun)解决了这个问题我通过添加零点

我是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]);
有人能帮助我并指导我修复和克服此错误吗?

您应该:

[n m] = size(out1); 
因为
fr
只有一行,而
out1
有很多行

但是,您甚至可以使用
bsxfun()
跳过重新绘制:


能否复制并粘贴正在运行的
whos
的输出?输出字符太长。我将把它分成几个部分。我只是把输出放在问题的开头
B = bsxfun(@rdivide, bsxfun(@minus,out1,AMean), AStd);