私は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]);
誰かが私を助けて、このエラーを修正して克服するために私を導くことができますか?