我是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