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
if
语句需要以下语句计算出一个标量的真/假值。如果该语句是一个数组,则其行为等同于将其包装在all(..)
中。
如果您的比较结果是一个逻辑数组,例如
H0 = 1:10;
H = 5;
test = H0>H;
您有两个选项可以通过 if
语句传递 test
:
(1) 您可以聚合 test
的输出,例如当test
中的任何元素为真时,您希望执行 if 子句,例如any
或 all
,例如:
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)
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
函数返回线性索引中所有大于 10 的 H0
值的索引。
X = find(H0>H)
X =
7
8
9
10
11
find
函数返回线性索引中所有小于 10 的 H0
值的索引。
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
P(ii)=H0(ii)
。然而,如果你想应用你在另一个评论中提到的函数,那么我的编辑将允许你在一行简单的代码中完成这个操作。 - Jonas