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总是做另一件事。
答案 0 :(得分:8)
if
需要以下语句来评估标量true / false。如果语句是数组,则行为等同于将其包装在all(..)
。
如果您的比较结果是逻辑数组,例如
H0 = 1:10;
H = 5;
test = H0>H;
您有两种方法可以通过test
语句传递if
:
(1)您可以聚合test
的输出,例如,您希望在any
中all
或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)
答案 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)
而不是
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
请注意,这是一般解决方案。