Matlab 如何将数组与if语句的数字进行比较?

Matlab 如何将数组与if语句的数字进行比较?,matlab,if-statement,Matlab,If Statement,H0是一个数组([1:10]),而H是一个数字(5) 如何将H0中的每个元素与单个编号H进行比较 例如在 if H0>H do something else do another thing end MATLAB总是做另一件事。如果需要以下语句来计算标量true/false。如果该语句是一个数组,则其行为相当于将其包装在all(..)中 如果比较结果是逻辑数组,例如 H0 = 1:10; H = 5; test = H0>H; 您有两个选项可以通过if-语句通

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

如何将
H0
中的每个元素与单个编号
H
进行比较

例如在

if H0>H 
   do something
else
   do another thing
end

MATLAB总是做另一件事。

如果
需要以下语句来计算标量true/false。如果该语句是一个数组,则其行为相当于将其包装在
all(..)

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

H0  = 1:10;
H   = 5;
test = H0>H;
您有两个选项可以通过
if
-语句通过
test

(1) 您可以聚合
test
的输出,例如,您希望在
test
中的
any
all
元素为true时执行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如果H0(i),请查看以下内容:使用
ismmeber()
函数。坦率地说,我不知道你希望如何比较。大于、小于、等于或在成员范围内。所以我的回答可能还不能让你满意。但不管怎样,只是给你一个想法

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
处理将较大/较小的值拆分为两个不同的向量-我假设…:)

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

X = find(H0>H)
X = 
     7
     8
     9
     10
     11
Y = find(H0<H)
Y =
     1
     2
     3
     4
     5
     6
函数
find
返回线性索引中
H0
中小于10的所有值的索引

X = find(H0>H)
X = 
     7
     8
     9
     10
     11
Y = find(H0<H)
Y =
     1
     2
     3
     4
     5
     6

@乔纳斯在最后一行中给出了很好的回答,这促使我提出了一个使用逻辑索引的版本

而不是

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

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

我想比较数组中的每个元素是否小于该数字,如果H0I使用“for”,则是这样,但如果测试(ii),则ii=1:长度(test)存在问题P=H0 end end因为H0是一个由10个数字组成的数组,我得到了10*10的P值,不仅仅是10,我知道我是个初学者,但无论如何,谢谢you@Nawar:您必须正确索引,例如
P(ii)=H0(ii)
。但是,如果你想应用你在另一条评论中提到的功能,那么我的编辑将允许你在一行中完成。你能把最后一个解决方案放在你答案的顶部吗?
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