如何将数组与matlab中if语句的数字进行比较

时间:2012-12-03 13:00:47

标签: matlab if-statement

H0 is an array [1:10]
H is a single number [5]

如何将H0中的每个元素与单个数字H进行比较 所以

if H0>H 
do something, 
else do another thing, 
end

Matlab总是做另一件事。

3 个答案:

答案 0 :(得分:8)

if需要以下语句来评估标量true / false。如果语句是数组,则行为等同于将其包装在all(..)

如果您的比较结果是逻辑数组,例如

H0  = 1:10;
H   = 5;
test = H0>H;

您有两种方法可以通过test语句传递if

(1)您可以聚合test的输出,例如,您希望在anyalltest元素执行时执行if子句是的,例如

if any(test)
  do something
end

(2)您遍历test的元素,并做出相应的反应

for ii = 1:length(test)
   if test(ii)
      do something
   end
end

请注意,可以使用逻辑向量test作为索引来矢量化此操作。

修改

如评论中所示,如果您需要P(i)=H0(i)^3 if H0(i)<H,或者P(i)=H0(i)^2,则只需撰写

 P = H0 .^ (H0<H + 2)

答案 1 :(得分:1)

无论如何看看这个:使用ismemeber()函数。坦率地说,你不确定如何比较。大于,小,等于或在成员之内。所以我的回答可能还不令你满意。但无论如何只是给你一个想法。

H0 = [0 2 4 6 8 10 12 14 16 18 20];
H  = [10];
ismember(H,H0)
IF (ans = 1) then
// true
else
//false
end 

更新答案

这是超级强力方法 - 只需使用它解释。在这里给出的任何其他答案比我提出的更好。理想情况下,您需要通过^3处理将更大/更低的值转换为两个不同的向量 - 我假设......:)

H0 = [0 2 4 6 8 10 12 14 16 18 20];
H  = [10];

H0(:)
ans = 
     0
     2
     4
     6
     8
     10
     12
     14
     16
     18
     20

函数find返回H0中线性索引中大于10个值的所有值的索引。

X = find(H0>H)
X = 
     7
     8
     9
     10
     11

函数find在线性索引中返回H0中低于10的所有值的索引。

Y = find(H0<H)
Y =
     1
     2
     3
     4
     5
     6

如果您希望可以访问H0的每个元素以检查更大/更低的值,或者您可以使用带索引的上述矩阵将H0的值从算术运算中转换为两个不同的数组。

G = zeros(size(X)); // matrix with the size = number of values greater than H
J = zeros(size(Y)); // matrix with the size = number of values lower than H

for i = 1:numel(X)
     G(i) = H0(X(i)).^3
end

G(:)
ans =

      1728
      2744
      4096
      5832
      8000

for i = 1:numel(Y)
     J(i) = H0(Y(i)).^2
end

J(:)
ans =

      0
      4
     16
     36
     64
    100

答案 2 :(得分:1)

<@> @ Jonas在他最后一行的答案很好,这促使我想出了一个使用逻辑索引的版本。

而不是

for i=1:N
  if H0(i)>H
     H0(i)=H0(i)^2;
  else
     H0(i)=H0(i)^3;
  end
end

你可以这样做

P = zeros(size(H0)); % preallocate output
test = H0>H;

P(test) = H0(test).^2; % element-wise operations 
                       % on the elements for which the test is true

P(~test) = H0(~test).^3; % element-wise operations 
                         % on the elements for which the test is false

请注意,这是一般解决方案。