可能不正确的Matlab错误:“;下标赋值维度不匹配“;

可能不正确的Matlab错误:“;下标赋值维度不匹配“;,matlab,Matlab,Matlab给了我一个错误,“下标赋值维度不匹配”,但我认为这不应该有问题。代码如下,但基本上我有一个临时矩阵,它模仿另一个矩阵testData(实际上是它的子集)的维度。我可以将imread的输出分配给temp矩阵,但不能分配给具有相同维度的testData子集。我甚至可以用尺寸函数来证明它们是相同的尺寸,但一个可行,一个不可行。所以我设置temp=imread,然后testData=temp,它就可以工作了。但我为什么要这么做呢 fileNames = dir('Testing\*.pgm'

Matlab给了我一个错误,“下标赋值维度不匹配”,但我认为这不应该有问题。代码如下,但基本上我有一个临时矩阵,它模仿另一个矩阵testData(实际上是它的子集)的维度。我可以将imread的输出分配给temp矩阵,但不能分配给具有相同维度的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 fileNames=dir('Testing\*.pgm'); numFiles=大小(文件名,1); testData=0(32257,numFiles); 温度=零(32256,1); 对于i=1:numFiles, fileName=文件名(i).name; %从文件名中提取一些信息并将其存储在第一行 testData(1,i)=str2double(文件名(6:7)); %此处,temp的维度与testData相同(2:end,i) %然而testData(2:end,i)=imread(fileName)不起作用 %但是,如果我使用temp作为“中间人”变量,它就可以工作 temp(:)=imread(文件名); 测试数据(2:end,i)=温度(:); 结束
如果您正在读取的文件是彩色图像,
imread
返回一个
MxNx3
数组。如果不对
1D
向量进行整形,则无法将
3D
数组指定给
1D
向量,即使该向量包含相同数量的元素。这可能就是当您试图将
imread
的输出直接分配给
testData
时出现错误的原因。但是,当您使用中间变量并将其折叠为列向量时,赋值是有效的,因为现在您正在将
1D
向量赋值给另一个大小相同的
1D
向量

如果不想使用其他步骤,请尝试以下操作

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

它实际上是灰度的,但是重塑效果很好。谢谢