【问题标题】:Matlab - Reduce value by 1 until no error [closed]Matlab - 将值减少1直到没有错误[关闭]
【发布时间】:2021-07-06 10:15:11
【问题描述】:

我使用同一个程序分析包含不同列数的数据文件。

每个数据文件需要不同的条件才能使reshape 函数成功运行。我有以下代码可以完美运行。简而言之,如果 reshape 不成功,它会将 raw = raw(:,1,x); 中的 x 减 1 并尝试 reshape,如果仍然无法 reshape 则再次尝试等等。

是否可以重写这段代码以减少乏味?

[~, ~, raw] = xlsread(test_filename,test_sheetname);

    try raw = raw(:,1:17); d = reshape([raw{:}],size(raw)); catch 
    try raw = raw(:,1:16); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:15); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:14); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:13); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:12); d = reshape([raw{:}],size(raw));catch
    try raw = raw(:,1:11); d = reshape([raw{:}],size(raw));catch 
    end
    end
    end
    end
    end  
    end   
    end

【问题讨论】:

  • raw 中有什么内容?请制作一些随机示例数据,以便我们更好地理解问题。我不明白你的重塑声明应该做什么。如果所有单元格元素都有一个标量,它将始终有效,如果任何单元格具有多个值,它将永远不会工作,除非另一个单元格为空。这些数据是如何产生的?为什么是元胞数组?怎么把部分数据删掉就可以了?
  • 感谢您的 cmets,我做了一些更改来解决您的问题。
  • 这仍然没有意义。请创建一个小例子raw,您可以分享。你用空单元格切断列吗?还是用文字?与像您一样反复尝试相比,这些事情中的任何一个都可以更轻松有效地完成。像这样使用 try/catch 或在答案中使用循环只是一个非常糟糕的设计。

标签: matlab reshape mesh contour


【解决方案1】:

正如 cmets 中所述,这个问题需要澄清。但是,您可以使用 for 循环来避免嵌套 try/catch 语句:

for x = 17:-1:11
  try
    raw = raw(:,1:x); 
    d = reshape([raw{:}],size(raw)); 
    break;
  catch
  end
end

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多