我想知道如何选择与我的预定义数字相对应(即相同位置)的数字。
例如,我有以下向量:
ps-u[username]
我需要从ps -u [username] -o stat,cmd --sort=-pid | awk '{print $2$3$4}'
中选择与a = [ 1 0.1 2 3 0.1 0.5 4 0.1];
b = [100 200 300 400 500 600 700 800]
中的整数位置(1、2、3和4)相对应的元素,因此输出必须为:
b
这怎么办?
答案 0 :(得分:2)
基于a
创建逻辑索引,并将其应用于a
和b
以获得所需的结果:
ind = ~mod(a,1); % true for integer numbers
output = [a(ind); b(ind)].'; % build result
答案 1 :(得分:1)
尽管意图不明确,但创建矩阵索引是解决方案
我的解决方法是
checkint = @(x) ~isinf(x) & floor(x) == x % It's very fast in a big array
[a(checkint(a))' b(checkint(a))']
此处的关键是创建到a
和b
的索引,它们是a
中整数值的逻辑向量。此功能checkint
很好地检查了整数。
其他检查整数的方法可能是
checkint = @(x)double(uint64(x))==x % Slower but it works fine
或
checkint = @(x) mod(x,1) == 0 % Slowest, but it's robust and better for understanding what's going on
或
checkint = @(x) ~mod(x,1) % Slowest, treat 0 as false
已经在许多其他主题中进行了讨论。
答案 2 :(得分:1)
round(x) == x ----> x is a whole number
round(x) ~= x ----> x is not a whole number
round(2.4) = 2 ------> round(2.4) ~= 2.4 --> 2.4 is not a whole number
round(2) = 2 --------> round(2) == 2 ----> 2 is a whole number
遵循相同的逻辑
a = [ 1 0.1 2 3 0.1 0.5 4 0.1];
b = [100 200 300 400 500 600 700 800 700];
iswhole = (round(a) == a);
output = [a(iswhole); b(iswhole)]
结果:
output =
1 2 3 4
100 300 400 700
答案 3 :(得分:1)
我们可以基于使用fix()函数生成逻辑索引
enter code here