可能不正确的Matlab错误:“订阅的分配维度不匹配”

时间:2011-04-03 19:25:02

标签: matlab

Matlab给我的错误是“订阅分配维度不匹配”,但我不认为应该存在问题。代码如下,但基本上我有一个模拟另一个矩阵testData(实际上是它的一个子集)的维度的临时矩阵。我可以将imread的输出分配给临时矩阵,但不能分配给具有相同尺寸的testData子集。我甚至可以使用尺寸函数来证明它们是相同的尺寸但是一个有效,一个没有。所以我设置temp = imread然后testData = temp并且它可以工作。但我为什么要这样做?

fileNames = dir('Testing\*.pgm');
numFiles = size(fileNames, 1);
testData = zeros(32257, numFiles);
temp = zeros(32256, 1);

for i = 1 : numFiles,
  fileName = fileNames(i).name;

  % Extracts some info from the file's name and stores it in the first row
  testData(1, i) = str2double(fileName(6:7));

  % Here temp has the same dimensions as testData(2:end, i)
  % yet testData(2:end, i) = imread(fileName) doesn't work
  % however it works if I use temp as a "middleman" variable
  temp(:) = imread(fileName);
  testData(2:end, i) = temp(:);
end

1 个答案:

答案 0 :(得分:0)

如果您正在阅读的文件是彩色图像,imread会返回MxNx3数组。您不能将3D数组分配给1D向量而不对其进行重新整形,即使它包含相同数量的元素。当您尝试将imread的输出直接分配给testData时,这可能就是您收到错误的原因。但是,当您使用中间变量并将其折叠为列向量时,分配有效,因为现在您将1D向量分配给另一个大小相等的1D向量。

如果您不想使用其他步骤,请尝试使用

testData(2:end,i)=reshape(imread(fileName),32256,1);