【问题标题】:Possibly incorrect Matlab error: "Subscripted assignment dimension mismatch"可能不正确的 Matlab 错误:“下标分配尺寸不匹配”
【发布时间】:2011-07-28 18:16:15
【问题描述】:

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

文件名 = dir('Testing\*.pgm'); numFiles = 大小(文件名,1); testData = zeros(32257, numFiles); 温度 = 零(32256, 1); 对于 i = 1 : numFiles, 文件名 = 文件名(i).name; % 从文件名中提取一些信息并将其存储在第一行 testData(1, i) = str2double(fileName(6:7)); % 这里 temp 的维度与 testData(2:end, i) 相同 % 但 testData(2:end, i) = imread(fileName) 不起作用 % 但是,如果我使用 temp 作为“中间人”变量,它会起作用 temp(:) = imread(文件名); testData(2:end, i) = temp(:); 结尾

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    如果你不想使用额外的步骤,试试这个

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

    【讨论】:

    • 它实际上是灰度的,但重塑效果很好。谢谢。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2013-12-23
    • 2017-10-28
    • 2012-06-10
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多