9

H0是一个数组 ( [1:10]),并且H是一个数字 ( 5)。

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

例如在

if H0>H 
   do something
else
   do another thing
end

MATLAB 总是做其他事情。

4

3 回答 3

9

if需要以下语句来评估标量真/假。如果语句是一个数组,则行为相当于将其包装在all(..).

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

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

您有两个选项可以test通过if-statement:

(1) 您可以聚合 的输出test,例如,您希望在anyall中的元素test为真时执行 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)
于 2012-12-03T13:07:10.720 回答
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

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

于 2012-12-03T20:18:06.627 回答
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
于 2012-12-03T13:11:38.987 回答