在赋值A(I)= B中,B和I中的元素数必须相同

时间:2016-02-13 16:00:36

标签: matlab

这是我在Matlab中的代码:我怎样才能保存所有5个图像的所有值?此代码仅返回最后一张图片!我尝试使用IM(l),但它给了我一个错误:In an assignment A(I) = B, the number of elements in B and I must be the same.

Amount_measurements = 5;

IM=zeros(2097152,1);
l=1;
for l=(1:Amount_measurements)
    if l < 9
        %index = double(0)+double(0)+double(l+1);
        index = strcat(num2str(double(0)),num2str(double(0)),num2str(double(l+1)));
    elseif l < 99
        index = double(0)+double(l+1);
    else
        index = double(l+1);
    end

    file_name1='trial.nii.gz';
    %disp(file_name1);
    jesu=load_nii(file_name1);

    [x,y,z] = meshgrid(1:256,1:256,1:256);
    [lx,ly,lz] = meshgrid(1:2:256,1:2:256,1:2:256);
    newImage = interp3(x,y,z,jesu.img,lx,ly,lz);
    IM= newImage(:);   
end

我希望将值newImage(:)存储为IM1=newImage(:) IM2=newImage(:) IM3=newImage(:) IM4=newImage(:)等等......我怎么能用它来进行呢?

2 个答案:

答案 0 :(得分:2)

由于您提到需要IM1=newImage(:) IM2=newImage(:) IM3=newImage(:) IM4=newImage(:)的可变长度版本,因此您正在寻找一个单元格数组。尝试

IM{l} = newImage;

而不是

IM(l) = newImage(:);

重要的区别是使用括号而不是括号。如果要重塑为矢量,请使用newImage(:)的右侧,如果要将其保留为矩阵,请使用newImage

答案 1 :(得分:-1)

通过使用IM(l),您尝试将整个列向量(newImage(:))添加到数组IM中的单个元素(第l个元素),这就是Matlab的原因抛出错误。
您应该考虑连接:因为newImage(:)是列向量,所以替换

IM= newImage(:);  

IM=[IM newImage(:)];

但是在脚本的顶部,您还应该将IM初始化为

IM=[];

在循环结束时,生成的IM将有Amount_measurements列,其中1列= 1 newImage(:)。

注意#1 :仅当newImage(:)的长度始终相同时才会有效。
Note#2 :如果你知道向量newImage(:)的先验有多长,并且再次假设它的长度永远不会改变,你应该考虑预先分配IM矩阵将IM=[];替换为IM=zeros(X,Amount_measurements);,其中XnewImage(:)中元素的数量。最后,关于连接阶段,您应该将IM=[IM newImage(:)];替换为IM(:,l)=newImage(:) Note#3 :相反,如果newImage(:)的大小可以改变,则不能依赖预分配和矩阵,但必须使用单元数组:循环中的最后一条指令应为{{ 1}}。