【问题标题】:Matlab: Init variable if undefinedMatlab:如果未定义则初始化变量
【发布时间】:2012-08-03 23:22:36
【问题描述】:

如何声明/分配一个变量,除非它以前从未分配过?

上下文:

我正在尝试找到使 k 的函数 calculateSomeDistance(k) 最小化的 k。最小距离和相应的 k 值应该可用(即在范围内)以供以后使用。 我应该如何声明 minDistance 以便在将其与当前计算的距离进行比较之前检查它是否已经初始化?

% How should I declare minDistance?
minDistance=undefined; % Doesn't exist.
for ki=1:K,
  distance=calculateSomeDistance(ki);
  if(isUndefined(minDistance) || distance < minDistance)
    minDistance = distance;
    minK = ki;
  end
end
% Here minK and minDistance must be in scope

有没有办法在 matlab/octave 中为变量分配一个空值/未定义值,然后对其进行测试以进行第一次有效分配?

PS: 将 minDistance 初始化为一个非常大的数字非常难看,而不是我想要的。

当 ki 为 1(即第一次通过)时初始化 minDistance 是可以的,但仍然不好。

【问题讨论】:

  • 我会在答案中选择nan/isnan() 路线,而不是exist()

标签: matlab undefined


【解决方案1】:

您可以使用exist检查变量是否存在:

if ~exist('minDistance','var')
    minDistance = initValue;
end

如果您想让变量存在于工作区中,但处于未定义状态,您可以分配nan(不是数字)并使用isnan 进行检查。这将类似于您提出的解决方案,其值类型明确不会与变量的任何有效值冲突。

【讨论】:

  • isnan 有问题,因为它只适用于双数组。如果输入isnan({})会报错:Undefined function 'isnan' for input arguments of type 'cell'.
猜你喜欢
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多