求一多维数组接近的算法。
RT
A=
B = numpy.array(,
,
)
A 在数组B中最接近的是 , 比较条件:正负的权重大于加减,这句话说明白了吧。
B1 = numpy.array(,
,
,
) 结果还是。因为加减没有全匹配到。
数字中没有0.
本帖最后由 523066680 于 2018-03-17 15:32 编辑
my $A = ;
my $B = [
,
,
,
,
];
# 估值
my @esta;
my @estb;
my $e_a;
my $e_b;
for my $subset ( @$B )
{
$e_a = 0;
$e_b = 0;
for my $id ( 0 .. $#$A )
{
$e_a ++ if ( $subset->[$id] / $A->[$id] < 0 ); # 若正负相反,估值变大
$e_b += ($subset->[$id] - $A->[$id])**2; # 分量距离作为估值
}
push @esta, $e_a;
push @estb, sqrt($e_b);
}
# 显示各组估值情况
for my $id ( 0..$#esta )
{
printf "%4.1f %4.1f %4.1f", @{$B->[$id]};
printf "esta: %d estb: %.3f\n", $esta[$id], $estb[$id];
}
# 分级排序,正负估值优先,向量距离其次
my @order=
sort
{
$esta[$a] <=> $esta[$b] ||
$estb[$a] <=> $estb[$b]
} ( 0 .. $#esta );
my $best = $order;
# 结果
printf "\nBest: %s\n", join(", ", @{ $B->[$best] } );
2, -1, 3 是自己加上去的。
1.01.01.0esta: 1 estb: 4.123
1.0 -1.01.0esta: 0 estb: 3.606
2.0 -1.03.0esta: 0 estb: 1.414
1.01.0 -1.0esta: 2 estb: 5.745
3.01.04.0esta: 1 estb: 2.000
Best: 2, -1, 3
这个需求还是说不清,
[-1,-1,1]和哪个更接近?如果没有正好匹配的,哪个更接近?
和哪个更接近? 正负匹配, 加减也一样,怎么算? 回复 2# laputa73
看来是我没说清楚。重点考虑正负,没有没有正负,返回没有匹配到,匹配到正负后,算出最接近得
回复 2# 523066680
多多感谢
A = np.array()
B = np.array([,,])
# distances array-wise
np.abs(B - A)
# sum of absolute values of distances (smallest is closest)
np.sum(np.abs(B - A), axis=1)
# index of smallest (in this case index 1)
np.argmin(np.sum(np.abs(B - A), axis=1))
# all in one line (take array 1 from B)
result = B
页:
[1]