【问题标题】:sprintf confusion (Matlab)sprintf 混淆(Matlab)
【发布时间】:2013-10-13 03:02:34
【问题描述】:

快速提问,

我想在 Matlab 中使用 sprintf 从 50 到 70 进行计数。此示例打印 0101-0120

for i = 1:20
    filename = sprintf('Brain_01%02d.dcm', i);
    [X(:,:,1,i), amap] = dicomread(filename);
end

如何将其更改为打印 0151-0170?

【问题讨论】:

    标签: matlab printf dicom


    【解决方案1】:

    一开始答案似乎很明显,但如果i 不是从一个开始,似乎另一个问题可能与X 的索引损坏有关。这是在处理 X 的预分配时解决此问题的一种方法,

    imgInds = 151:170;
    di = dicominfo(sprintf('Brain_%04d.dcm',imgInds(1)));
    X = zeros(di.Height,di.Width,1,numel(imgInds),class(dicomread(di))); % modify
    
    for i = 1:numel(imgInds),
        filename = sprintf('Brain_%04d.dcm', imgInds(i));
        [X(:,:,1,i), amap] = dicomread(filename);
    end
    

    为了清楚起见,我认为使用%04d 而不是01%02d 构建您的sprintf 更好。您应该在标记为modify 的行上相应地设置X 的大小,尤其是第三个维度,因为我假设您的实际代码不会是1

    【讨论】:

      【解决方案2】:

      我猜应该这样做:

      for i = 51:70
          filename = sprintf('Brain_01%02d.dcm', i);
          [X(:,:,1,i), amap] = dicomread(filename);
      end
      

      【讨论】:

        【解决方案3】:

        感谢您的回复!实际上我需要做的(为了我的目的)是:

        for i = 1:20
        filename = sprintf('Brain_01%02d.dcm', i + 49);
        [X(:,:,1,i), amap] = dicomread(filename);
        end
        

        这使得计数从 50 开始。

        【讨论】:

          猜你喜欢
          • 2012-01-20
          • 2016-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-04
          • 2015-07-31
          • 1970-01-01
          • 2021-05-06
          相关资源
          最近更新 更多