从numpy数组中删除彼此更接近的值

zvms9eto  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(80)

实际上,我想从numpy数组中删除彼此更接近的元素。例如,我有一个数组[1,2,10,11,18,19],那么我需要的代码可以给予像[1,10,18]这样的输出,因为2更接近1等等。

ttygqcqt

ttygqcqt1#

在下文中,提供了使用numpy函数(更精确地,np.ediff1d)的附加解决方案,其在给定阵列的连续元素之间产生差异。此代码将与th变量关联的值视为阈值。

a = np.array([1,2,10,11,18,19])
th = 1
b = np.delete(a, np.argwhere(np.ediff1d(a) <= th) + 1) # [1, 10, 18]

字符串

a5g8bdjr

a5g8bdjr2#

这里是一个简单的函数,用于查找1D numpy数组中连续值系列的第一个值。

import numpy as np

def find_consec(a, step=1):
    vals = []
    for i, x in enumerate(a):
        if i == 0:
            diff = a[i + 1] - x
            if diff == step:
                vals.append(x)
        elif i < a.size-1:
            diff = a[i + 1] - x
            if diff > step:
                vals.append(a[i + 1])
    return np.array(vals)

a = np.array([1,2,10,11,18,19])
find_consec(a) # [1, 10, 18]

字符串

plicqrtu

plicqrtu3#

欢迎来到stackoverflow。下面的代码可以回答你的问题:

def closer(arr,cozy):
    result = []
    result.append(arr[0])
    for i in range(1,len(arr)-1):
        if arr[i]-result[-1]>cozy:
            result.append(arr[i])
    print result

字符串
示例如下:

a = [6,10,7,20,21,16,14,3,2]
a.sort()
closer(a,1)
output : [2, 6, 10, 14, 16, 20]
closer(a,3)
Output: [2, 6, 10, 14, 20]

sqserrrh

sqserrrh4#

抱歉,我来晚了。但聚集集群可能是你正在寻找的。通过指定距离阈值和链接标准,该算法将返回期望的结果。

from sklearn.cluster import AgglomerativeClustering
a = np.array([1,2,10,11,18,19])
dups_filter = AgglomerativeClustering(linkage="single", distance_threshold=1.1, metric="manhattan", n_clusters=None)

cluster_labels = dups_filter.fit_predict(a.reshape(-1,1))
filtered_array = np.array([])
for c in range(dups_filter.n_clusters_):
 filtered_array = np.append(filtered_array, np.min(a[cluster_labels==c]))

字符串

相关问题