问题描述
我有两个元素数量相等的向量。它们分别称为x
和y
,并具有N
元素。我想保留条件S(x(i),y(i))>0.1
所适用的向量的元素。
例如,如果S(x_i,y_i)
小于0.1
,我想从向量x_i
和y_i
中删除x
和y
,分别。 x_i
和y_i
是向量的第i
个元素的值。
我该怎么做?
示例:
x=[1,3,2,3];
y=[2,4,1,3];
在此示例中,代码应选中S(1,2),S(3,4),S(2,1),3)
。
认为S
是
S=[1,5;
1,0.001;
12,21,5]
那么向量的新值是:
xnew=[1,2];
ynew=[2,1];
解决方法
您可以执行以下操作:
- 从
df1 = df.groupby('day_name',sort=False,as_index=False)['on'].mean() print (df1) day_name on 0 Thursday 0.500000 1 Friday 0.833333 2 Saturday 0.166667 3 Sunday 0.333333 4 Monday 0.333333 5 Tuesday 0.333333 6 Wednesday 0.666667
和x
构建linear index,以选择所需的y
条目。 - 将这些条目与阈值进行比较。这样就可以在
S
和x
中使用logical index:
y
,
您可以做的是创建一个“消除数组”。遍历所有x,y
对,检查S
中的相应条目,如果满足条件,则将消除设置为true
。然后,最后删除所有应删除的元素。
x=[1,3,2,3];
y=[2,4,1,3];
S=[1,5;1,0.001;12,21,5];
% Preallocate to no elimination taking place
eliminate = zeros(size(x),'logical');
for ii = 1:numel(x) % Loop over all elements
if S(x(ii),y(ii)) < 0.1 % If the condition holds
eliminate(ii) = true; % Set elimination to true
end
end
% Remove elements to be eliminated
x(eliminate) = []
y(eliminate) = []
x =
1 2
y =
2 1
一线做这件事会更加优雅
eliminate = diag(S(x,y))<0.1;
x(eliminate) = []
y(eliminate) = []
S(x,y)
创建一个矩阵,其中x
和y
被认为是可置换的,即在此示例中为4x4。我们只需要您提供的对,就在这个矩阵的对角线上;使用diag()
获得这些。然后,对<0.1
进行逻辑检查,最后使用与上述相同的删除技巧。