如何将数组与数字进行比较以用于if语句?

9

H0是一个数组([1:10]),而H是一个单独的数字(5)。

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

例如,在以下情况下:

if H0>H 
   do something
else
   do another thing
end

MATLAB总是做相反的事情。
3个回答

9

if语句需要以下语句计算出一个标量的真/假值。如果该语句是一个数组,则其行为等同于将其包装在all(..)中。

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

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

您有两个选项可以通过 if 语句传递 test

(1) 您可以聚合 test 的输出,例如当test中的任何元素为真时,您希望执行 if 子句,例如anyall,例如:

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)

我使用了 "for" 但出现了问题: for ii = 1:length(test) if test(ii) P=H0 end end 因为 H0 是一个包含 10 个数字的数组,所以我得到了 10*10 个 P 的值,而不仅仅是 10 个。 我知道我是初学者,但无论如何感谢您。 - Nawar
@Nawar:你必须正确索引,例如P(ii)=H0(ii)。然而,如果你想应用你在另一个评论中提到的函数,那么我的编辑将允许你在一行简单的代码中完成这个操作。 - Jonas
你能否把最后的解决方案放在你的答案顶部? - Barney Szabolcs

2
@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

请注意,这是一个通用解决方案。

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 函数返回线性索引中所有大于 10 的 H0 值的索引。

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

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

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

我想比较数组中的每个元素是否小于该数字,如果是,则P=H0^3,否则P=H0^2。 - Nawar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接