H0
是一个数组 ( [1:10]
),并且H
是一个数字 ( 5
)。
如何将每个元素H0
与单个数字进行比较H
?
例如在
if H0>H
do something
else
do another thing
end
MATLAB 总是做其他事情。
H0
是一个数组 ( [1:10]
),并且H
是一个数字 ( 5
)。
如何将每个元素H0
与单个数字进行比较H
?
例如在
if H0>H
do something
else
do another thing
end
MATLAB 总是做其他事情。
if
需要以下语句来评估标量真/假。如果语句是一个数组,则行为相当于将其包装在all(..)
.
如果您的比较结果是一个逻辑数组,例如
H0 = 1:10;
H = 5;
test = H0>H;
您有两个选项可以test
通过if
-statement:
(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)
@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
请注意,这是一个通用解决方案。
无论如何看看这个:使用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