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