[飞桨机器学习]DBSCAN算法

本文介绍DBSCAN算法的基本原理,包括密度可达与密度相连的概念,并详细解释了算法的步骤及实现过程。DBSCAN算法能有效识别出任意形状的簇类及噪声点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[飞桨机器学习]DBSCAN算法

一、简介

DBSCAN(Density-Based Spatial Clustering of Applications with Noise),具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。 该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。

二、相关概念

Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域;

核心对象:如果给定对象Ε邻域内的样本点数大于等于MinPts,则称该对象为核心对象;

直接密度可达:对于样本集合D,如果样本点q在p的Ε邻域内,并且p为核心对象,那么对象q从对象p直接密度可达。

密度可达:对于样本集合D,给定一串样本点p1,p2….pn,p= p1,q= pn,假如对象pi从pi-1直接密度可达,那么对象q从对象p密度可达。

密度相连:存在样本集合D中的一点o,如果对象o到对象p和对象q都是密度可达的,那么p和q密度相联。

可以发现,密度可达是直接密度可达的传递闭包,并且这种关系是非对称的。密度相连是对称关系。DBSCAN目的是找到密度相连对象的最大集合。

Eg: 假设半径Ε=3,MinPts=3,点p的E邻域中有点{m,p,p1,p2,o}, 点m的E邻域中有点{m,q,p,m1,m2},点q的E邻域中有点{q,m},点o的E邻域中有点{o,p,s},点s的E邻域中有点{o,s,s1}.

那么核心对象有p,m,o,s(q不是核心对象,因为它对应的E邻域中点数量等于2,小于MinPts=3);

点m从点p直接密度可达,因为m在p的E邻域内,并且p为核心对象;

点q从点p密度可达,因为点q从点m直接密度可达,并且点m从点p直接密度可达;

点q到点s密度相连,因为点q从点p密度可达,并且s从点p密度可达。

三、DBSCAN算法描述:

img

输入: 包含n个对象的数据库,半径e,最少数目MinPts;

输出:所有生成的簇,达到密度要求。

(1)Repeat

(2)从数据库中抽出一个未处理的点;

(3)IF抽出的点是核心点 THEN 找出所有从该点密度可达的对象,形成一个簇;

(4)ELSE 抽出的点是边缘点(非核心对象),跳出本次循环,寻找下一个点;

(5)UNTIL 所有的点都被处理。

DBSCAN对用户定义的参数很敏感,细微的不同都可能导致差别很大的结果,而参数的选择无规律可循,只能靠经验确定。

四、算法步骤

先说个人总结:先根据半径e,最少数目MinPts选择出核心对象,再根据核心对象划分簇

输入:样本集D=(x1,x2,…,xm)(x1,x2,…,xm),邻域参数(ϵ,MinPts)(ϵ,MinPts), 样本距离度量方式

输出: 簇划分C.

1)初始化核心对象集合Ω=∅Ω=∅, 初始化聚类簇数k=0,初始化未访问样本集合ΓΓ = D, 簇划分C = ∅∅

2) 对于j=1,2,…m, 按下面的步骤找出所有的核心对象:

a) 通过距离度量方式,找到样本xjxj的ϵϵ-邻域子样本集Nϵ(xj)Nϵ(xj)

b) 如果子样本集样本个数满足|Nϵ(xj)|≥MinPts|Nϵ(xj)|≥MinPts, 将样本xjxj加入核心对象样本集合:Ω=Ω∪{xj}Ω=Ω∪{xj}

3)如果核心对象集合Ω=∅Ω=∅,则算法结束,否则转入步骤4.

4)在核心对象集合ΩΩ中,随机选择一个核心对象oo,初始化当前簇核心对象队列Ωcur={o}Ωcur={o}, 初始化类别序号k=k+1,初始化当前簇样本集合Ck={o}Ck={o}, 更新未访问样本集合Γ=Γ−{o}Γ=Γ−{o}

5)如果当前簇核心对象队列Ωcur=∅Ωcur=∅,则当前聚类簇CkCk生成完毕, 更新簇划分C={C1,C2,…,Ck}{C1,C2,…,Ck}, 更新核心对象集合Ω=Ω−CkΩ=Ω−Ck, 转入步骤3。否则更新核心对象集合Ω=Ω−CkΩ=Ω−Ck。

6)在当前簇核心对象队列ΩcurΩcur中取出一个核心对象o′o′,通过邻域距离阈值ϵϵ找出所有的ϵϵ-邻域子样本集Nϵ(o′)Nϵ(o′),令Δ=Nϵ(o′)∩ΓΔ=Nϵ(o′)∩Γ, 更新当前簇样本集合Ck=Ck∪ΔCk=Ck∪Δ, 更新未访问样本集合Γ=Γ−ΔΓ=Γ−Δ, 更新Ωcur=Ωcur∪(Δ∩Ω)−o′Ωcur=Ωcur∪(Δ∩Ω)−o′,转入步骤5.

输出结果为: 簇划分C={C1,C2,…,Ck}

五、优缺点

优点:

  1. 与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。

  2. 与K-means方法相比,DBSCAN可以发现任意形状的簇类。

  3. 同时,DBSCAN能够识别出噪声点。

  4. DBSCAN对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大。但是,对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动。

缺点:

  1. DBScan不能很好反映高维数据。

  2. DBScan不能很好反映数据集以变化的密度。

  3. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差。

六、代码实现

1.引入库

import random
import numpy as np
import math
import copy
import matplotlib.pyplot as plt

2.计算欧式距离

# 计算欧式距离
def calculate_euclidean_distance(data1, data2, length):
    distance = 0.0
    for i in range(length):
            distance += pow((data1[i]-data2[i]), 2)
    return math.sqrt(distance)

3.密度聚类

def dbascn(data, min_distance, min_num):
    q = []
    for i in range(len(data)):
        count = 0
        for j in range(len(data)):
            if calculate_euclidean_distance(data[i], data[j], 4) < min_distance:
                count += 1
        if count >= min_num:
            q.append(data[i])

    print(q)

    c = []
    for i in range(len(q)):
        c.append([])

    for i in range(len(q)):
        for j in range(len(data)):
            if data[j] != 0 and calculate_euclidean_distance(q[i], data[j], 4) < min_distance:
                c[i].append(data[j])
                data[j] = 0

    print(data)

    count = 0
    for i in range(len(data)):
        if data[i] == 0:
            count += 1
    for i in range(count):
     data.remove(0)

    return c, q, data

4.可视化

def veision(c, q, noise):
    cc = []
    for i in range(len(c)):
        for j in range(len(c[i])):
            cc.append(c[i][j])

    data = np.array(cc)
    data2 = np.array(noise)
    data3 = np.array(q)

    mean_vector = np.mean(data, axis=0)
    mean_vector2 = np.mean(data2, axis=0)
    mean_vector3 = np.mean(data3, axis=0)

    cov_mat = np.cov(data - mean_vector, rowvar=0)
    cov_mat2 = np.cov(data2 - mean_vector2, rowvar=0)
    cov_mat3 = np.cov(data3 - mean_vector3, rowvar=0)

    fvalue, fvector = np.linalg.eig(cov_mat)
    fvalue2, fvector2 = np.linalg.eig(cov_mat2)
    fvalue3, fvector3 = np.linalg.eig(cov_mat3)

    fvaluesort = np.argsort(-fvalue)
    fvaluesort2 = np.argsort(-fvalue2)
    fvaluesort3 = np.argsort(-fvalue3)

    fValueTopN = fvaluesort[:2]
    fValueTopN2 = fvaluesort2[:2]
    fValueTopN3 = fvaluesort3[:2]

    newdata = fvector[:, fValueTopN]
    newdata2 = fvector2[:, fValueTopN2]
    newdata3 = fvector3[:, fValueTopN3]

    new = np.dot(cc, newdata)
    new2 = np.dot(noise, newdata2)
    new3 = np.dot(q, newdata3)

    c1 = []
    c2 = []
    for i in range(len(new)):
        c1.append(new[i][0])
        c2.append(new[i][1])

    n1 = []
    n2 = []
    for i in range(len(new2)):
        n1.append(new2[i][0])
        n2.append(new2[i][1])

    q1 = []
    q2 = []
    for i in range(len(new3)):
        q1.append(new3[i][0])
        q2.append(new3[i][1])

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax1.scatter(c1, c2, marker='*')
    ax1.scatter(q1, q2, marker='^')
    ax1.scatter(n1, n2, marker='+')

    plt.show()

5.主程序

if __name__ == "__main__":
    # 生成随机数据
    data_set = []
    for i in range(100):
        data_set.append([])
        for j in range(4):
            data_set[i].append(random.uniform(-50, 50))

    print(data_set)

    c, q, noise = dbascn(data_set, 25, 5)
    print(c)
    print(noise)

    veision(c, q, noise)

6.完整代码

import random
import numpy as np
import math
import copy
import matplotlib.pyplot as plt


# 计算欧式距离
def calculate_euclidean_distance(data1, data2, length):
    distance = 0.0
    for i in range(length):
            distance += pow((data1[i]-data2[i]), 2)
    return math.sqrt(distance)


def dbascn(data, min_distance, min_num):
    q = []
    for i in range(len(data)):
        count = 0
        for j in range(len(data)):
            if calculate_euclidean_distance(data[i], data[j], 4) < min_distance:
                count += 1
        if count >= min_num:
            q.append(data[i])

    print(q)

    c = []
    for i in range(len(q)):
        c.append([])

    for i in range(len(q)):
        for j in range(len(data)):
            if data[j] != 0 and calculate_euclidean_distance(q[i], data[j], 4) < min_distance:
                c[i].append(data[j])
                data[j] = 0

    print(data)

    count = 0
    for i in range(len(data)):
        if data[i] == 0:
            count += 1
    for i in range(count):
     data.remove(0)

    return c, q, data


def veision(c, q, noise):
    cc = []
    for i in range(len(c)):
        for j in range(len(c[i])):
            cc.append(c[i][j])

    data = np.array(cc)
    data2 = np.array(noise)
    data3 = np.array(q)

    mean_vector = np.mean(data, axis=0)
    mean_vector2 = np.mean(data2, axis=0)
    mean_vector3 = np.mean(data3, axis=0)

    cov_mat = np.cov(data - mean_vector, rowvar=0)
    cov_mat2 = np.cov(data2 - mean_vector2, rowvar=0)
    cov_mat3 = np.cov(data3 - mean_vector3, rowvar=0)

    fvalue, fvector = np.linalg.eig(cov_mat)
    fvalue2, fvector2 = np.linalg.eig(cov_mat2)
    fvalue3, fvector3 = np.linalg.eig(cov_mat3)

    fvaluesort = np.argsort(-fvalue)
    fvaluesort2 = np.argsort(-fvalue2)
    fvaluesort3 = np.argsort(-fvalue3)

    fValueTopN = fvaluesort[:2]
    fValueTopN2 = fvaluesort2[:2]
    fValueTopN3 = fvaluesort3[:2]

    newdata = fvector[:, fValueTopN]
    newdata2 = fvector2[:, fValueTopN2]
    newdata3 = fvector3[:, fValueTopN3]

    new = np.dot(cc, newdata)
    new2 = np.dot(noise, newdata2)
    new3 = np.dot(q, newdata3)

    c1 = []
    c2 = []
    for i in range(len(new)):
        c1.append(new[i][0])
        c2.append(new[i][1])

    n1 = []
    n2 = []
    for i in range(len(new2)):
        n1.append(new2[i][0])
        n2.append(new2[i][1])

    q1 = []
    q2 = []
    for i in range(len(new3)):
        q1.append(new3[i][0])
        q2.append(new3[i][1])

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax1.scatter(c1, c2, marker='*')
    ax1.scatter(q1, q2, marker='^')
    ax1.scatter(n1, n2, marker='+')

    plt.show()







if __name__ == "__main__":
    # 生成随机数据
    data_set = []
    for i in range(100):
        data_set.append([])
        for j in range(4):
            data_set[i].append(random.uniform(-50, 50))

    print(data_set)

    c, q, noise = dbascn(data_set, 25, 5)
    print(c)
    print(noise)

    veision(c, q, noise)

7.结果

由于是随机生成数据,可以直观发现效果并不好

本人正在学习人工智能方向,日常更新一些学习记录,欢迎互相交流

欢迎三连,互粉,等你呦

# notebook显示plt
%matplotlib inline
import random
import numpy as np
import math
import copy
import matplotlib.pyplot as plt


# 计算欧式距离
def calculate_euclidean_distance(data1, data2, length):
    distance = 0.0
    for i in range(length):
            distance += pow((data1[i]-data2[i]), 2)
    return math.sqrt(distance)


def dbascn(data, min_distance, min_num):
    q = []
    for i in range(len(data)):
        count = 0
        for j in range(len(data)):
            if calculate_euclidean_distance(data[i], data[j], 4) < min_distance:
                count += 1
        if count >= min_num:
            q.append(data[i])

    print(q)

    c = []
    for i in range(len(q)):
        c.append([])

    for i in range(len(q)):
        for j in range(len(data)):
            if data[j] != 0 and calculate_euclidean_distance(q[i], data[j], 4) < min_distance:
                c[i].append(data[j])
                data[j] = 0

    print(data)

    count = 0
    for i in range(len(data)):
        if data[i] == 0:
            count += 1
    for i in range(count):
     data.remove(0)

    return c, q, data


def veision(c, q, noise):
    cc = []
    for i in range(len(c)):
        for j in range(len(c[i])):
            cc.append(c[i][j])

    data = np.array(cc)
    data2 = np.array(noise)
    data3 = np.array(q)

    mean_vector = np.mean(data, axis=0)
    mean_vector2 = np.mean(data2, axis=0)
    mean_vector3 = np.mean(data3, axis=0)

    cov_mat = np.cov(data - mean_vector, rowvar=0)
    cov_mat2 = np.cov(data2 - mean_vector2, rowvar=0)
    cov_mat3 = np.cov(data3 - mean_vector3, rowvar=0)

    fvalue, fvector = np.linalg.eig(cov_mat)
    fvalue2, fvector2 = np.linalg.eig(cov_mat2)
    fvalue3, fvector3 = np.linalg.eig(cov_mat3)

    fvaluesort = np.argsort(-fvalue)
    fvaluesort2 = np.argsort(-fvalue2)
    fvaluesort3 = np.argsort(-fvalue3)

    fValueTopN = fvaluesort[:2]
    fValueTopN2 = fvaluesort2[:2]
    fValueTopN3 = fvaluesort3[:2]

    newdata = fvector[:, fValueTopN]
    newdata2 = fvector2[:, fValueTopN2]
    newdata3 = fvector3[:, fValueTopN3]

    new = np.dot(cc, newdata)
    new2 = np.dot(noise, newdata2)
    new3 = np.dot(q, newdata3)

    c1 = []
    c2 = []
    for i in range(len(new)):
        c1.append(new[i][0])
        c2.append(new[i][1])

    n1 = []
    n2 = []
    for i in range(len(new2)):
        n1.append(new2[i][0])
        n2.append(new2[i][1])

    q1 = []
    q2 = []
    for i in range(len(new3)):
        q1.append(new3[i][0])
        q2.append(new3[i][1])

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax1.scatter(c1, c2, marker='*')
    ax1.scatter(q1, q2, marker='^')
    ax1.scatter(n1, n2, marker='+')

    plt.show()







if __name__ == "__main__":
    # 生成随机数据
    data_set = []
    for i in range(100):
        data_set.append([])
        for j in range(4):
            data_set[i].append(random.uniform(-50, 50))

    print(data_set)

    c, q, noise = dbascn(data_set, 25, 5)
    print(c)
    print(noise)

    veision(c, q, noise)
[[-15.379777735134503, -37.844364923635425, -41.755347510432294, -10.597228127051729], [39.15011395769959, -43.99579779457326, 21.258601551506914, -19.398430154651734], [38.69286619758692, -7.407664915859783, -33.393081198067776, 28.431060800624323], [-49.57831907291702, 2.428308178244812, 34.11223152089018, 23.767658448062008], [47.905456781794655, 28.35294800298925, 26.0236278292613, 9.680039107809655], [-41.22836632698631, 35.27063771889078, -20.75265385750784, -1.3882004384521238], [-9.076114874574102, -24.762374364538587, -23.891614323168685, 3.116076153897808], [3.002277730328615, 17.76470015424914, -17.257817272240516, -34.74188180866875], [13.141800930567562, 38.85081627137474, -34.8639917921499, -48.98593730117731], [-9.614791249147245, -14.453714733289367, 38.84847043962519, -26.65360151552264], [-43.247112024583735, -27.03238299385957, -31.673935498235227, 30.552227510157223], [-8.092232719135993, -34.21791475446994, -11.834498734508237, 2.6325560661688883], [-17.954133312676603, -20.37850885307594, -31.047864477182298, 21.717087185442168], [-38.150583048822526, 19.177770786802355, -24.680536820571174, 24.249103163657054], [-29.154545613170836, 0.46739324781639624, -49.13555020475455, -19.111223678809885], [-24.5897208817225, -46.004064571806815, -11.113514672100145, -9.453213405231878], [-15.285558935576773, 9.666631902126475, -7.7727823000732315, 41.7872917272836], [29.48533595789496, 10.231566863883515, 45.749740424917746, 20.65191194829154], [-46.87194196061512, 45.52495764002913, -29.60028066676933, -44.063796677195135], [12.53143664033405, 23.32352310525704, 20.31910127193281, -30.702325256345773], [37.62636397954449, 48.901876742791444, -41.94844330551318, -25.16637641814965], [-20.06874806820885, 21.039361298859916, 5.18714403709334, 5.639089289221097], [-48.991514838126726, -8.33888473451568, -6.4325119914144935, -26.730740413008668], [6.608798840745337, 30.885274067753528, 2.3690081318134872, 40.31795644381933], [-6.038711216441428, -8.244517812231763, -20.22547034413821, 22.153789459614188], [-0.4722471307015894, -17.239057062230664, -19.799273164220853, -46.14300158607788], [-10.585687905312511, 21.638150912415426, 11.64912939904579, -12.31415434654658], [-21.04638781031597, -13.54229826395946, 3.655988837188758, -19.186900116186745], [15.759051471102907, -14.042907912088133, -41.491807528373855, 48.16911488767765], [33.1226534708932, -16.047256841076383, -10.915703622248216, -47.737427380214115], [8.483625129864173, 13.747395715321161, 13.927437430332532, 8.307592721890067], [-3.300032730270466, -19.54646366384033, 2.3063465135731747, 14.478741649010061], [41.75980915996527, 36.88449106402287, 32.10610691118235, -18.397399121936143], [2.4004284194396845, 18.576726932456538, -32.396015123569285, 36.395185085375175], [-4.403041730048109, -4.476982545529239, 42.24644849778781, -2.660397443179704], [45.721819820125035, 24.741451192442597, -10.197816971677284, -5.240509940255222], [46.894099812966104, -9.556637524467526, -11.18144221782186, 43.69422148131791], [-22.219782649516073, 12.77540542027532, 0.28503230433155835, -36.502676698695566], [-10.708505749385886, 16.811389955820886, 21.35852261461642, -26.24331388098784], [0.5205696233696955, 5.53666204996761, 5.373100517694105, 39.960522003990036], [48.5063826614537, 34.45476828663213, 18.252505732349405, -15.257999858547514], [36.40091338904237, -23.71763727160876, -15.684672868607088, -14.940357502607306], [19.372815902442866, -1.9812058785611555, 45.844598775518435, 5.574581562496029], [30.53453133087109, 15.875724083790104, 19.299581202379017, -9.165374881648091], [-4.550635960221896, 3.4833452682243333, 11.467449295037902, -10.462956429204638], [-11.46225911508715, 15.663058958262425, -42.19121050493233, 33.514530969097194], [-47.14512226269034, 10.625316895299228, -19.117065316919014, 21.907971176696776], [38.35015395606709, -20.036192214266425, 34.00935056072419, -20.21107981696384], [33.72639043624906, 26.723144338210474, 26.315966893122337, -21.422074434762106], [-13.95897392527251, 23.344321830511987, 47.587240201915264, -4.081703117733994], [10.240293760576016, -35.39656702860597, 45.75898819074618, -37.77851915973961], [-10.5979796776097, 9.91925820407139, -27.324002744570553, 6.3978067560107945], [43.0839072342191, -30.79870941138816, 24.659382579726042, 34.957411852257394], [-35.83392820334616, -6.986721239847604, 18.73093743398755, 2.9069236594421426], [-12.420942126492875, -28.14197630594556, 37.97516028830391, -6.899799670518249], [5.240253550899332, 3.0201924692447193, -32.82401512888211, 34.45494315075889], [34.79636667414073, -34.28538172939935, -16.82828442516002, -24.468914092680482], [-18.964590485511156, -4.3154194340886605, -21.00034610621514, -8.290379397368675], [39.686545108239486, -46.75652684798539, 7.512496014434966, -1.1595964490758845], [27.13569898604713, -11.835839382876323, -16.56325680908349, 31.975832254470177], [19.03401688623653, -35.687314741333644, -6.195647566432427, -7.182349905329154], [13.397442977592519, -18.86511616112706, -22.314180622884006, -24.659608612387295], [23.038852343752325, -34.46749682011754, 47.24750535690261, 29.75451722745531], [17.741142804448856, 25.761961800973026, -27.796623265232178, 12.668652605652163], [19.471780958301622, -20.361706277083623, -36.013797225549595, -17.995762767855908], [-36.4380536152683, -32.36891354729286, 36.657301279162965, 17.728558629915057], [30.89343135787857, 9.73189072973667, -17.639368711839495, -26.386164277295954], [-16.733458122027045, 18.123150935924272, -6.8879795940193915, -5.320492839039034], [-4.625792654999017, 7.606617202335364, 10.54489600734557, 35.34929550792161], [-19.226628869922024, -48.322056433313, 34.111064408063044, 36.19258691141235], [-19.571219093314475, -17.154530944276623, -21.817686260843374, -35.46718779842125], [32.76122984658912, 34.60493043218705, -23.135615055603743, 20.92182023764873], [22.585825067401217, -7.012725843884446, 7.628844237583301, -18.176844360487554], [-26.35257698195338, -14.741075687100434, -33.95328247723265, -17.385656968109252], [-12.370353338316598, 41.0687492656549, 14.45920128002534, 7.436840423378207], [-11.423434767771269, 6.121207342667034, -36.632900176985586, -35.39281850938983], [-4.185655495149476, -19.716941763565032, -46.13207834330285, -39.30445442459795], [-42.352723226146914, 30.82702126059999, -21.95278327209138, -45.74170705126282], [2.367581277132217, -38.53389308869416, 40.03905029096123, 8.303266458507686], [-3.6104650670811793, -40.45047936090761, -32.006417072533644, -48.707048607545225], [-28.154030714711787, 25.56131389922487, -36.08739430639242, 23.757251857487034], [48.81900860320118, -29.754829313317575, -14.629273463800331, 20.430766160648005], [-28.39326624552726, 0.9030064618817022, 17.72855193526489, 28.31695411723794], [-40.23855908381828, 22.835284917680497, -39.072068283839315, 2.086610896427757], [-30.187079614911582, -40.100754845273215, -44.93431903359719, -48.29382508509127], [-39.77619202059122, 4.013882489841713, 16.09152969384543, -44.41550138284867], [-12.134640741543855, -26.20238801921042, 43.72014679622191, 7.913023468950023], [22.675697907678853, 23.18774555591449, -49.61385733160144, 11.090613476404975], [-0.6320518341531169, 7.586133560663065, 18.354222988974726, 1.666208863710274], [6.006484755090149, 8.942219799505772, 22.095419959737058, -22.07884989567154], [-30.26516637661296, -17.660112614903987, -46.32568198722181, -30.08530339998655], [-8.799559061404103, -6.65778410884689, -31.43849878849805, -41.6243576159548], [-17.514565965779802, -23.20362400241034, -3.0502807923108364, 37.79441344010134], [9.222699143016818, 29.838696456997795, -28.00335104040942, -9.187453693259464], [46.646242126890485, -49.81203363381314, 14.411485250546349, 3.9843828186897667], [-42.194012199569244, 37.901920213715655, 2.866570976517167, -20.711111429084816], [7.559155760544364, 20.154127768447623, -27.432178295089184, 11.22219171903609], [-38.40793316206393, 18.920316994303334, -10.795020729130798, 3.246742038075922], [-39.71611912217111, -16.086245734660544, 32.190074025080776, 17.328911746834763], [35.164579944442224, -24.31157159229942, -31.15213306532565, -26.193010613835543]]
[[-20.06874806820885, 21.039361298859916, 5.18714403709334, 5.639089289221097], [-10.585687905312511, 21.638150912415426, 11.64912939904579, -12.31415434654658], [-10.708505749385886, 16.811389955820886, 21.35852261461642, -26.24331388098784], [-4.550635960221896, 3.4833452682243333, 11.467449295037902, -10.462956429204638], [33.72639043624906, 26.723144338210474, 26.315966893122337, -21.422074434762106], [17.741142804448856, 25.761961800973026, -27.796623265232178, 12.668652605652163], [-26.35257698195338, -14.741075687100434, -33.95328247723265, -17.385656968109252], [-0.6320518341531169, 7.586133560663065, 18.354222988974726, 1.666208863710274], [6.006484755090149, 8.942219799505772, 22.095419959737058, -22.07884989567154], [-8.799559061404103, -6.65778410884689, -31.43849878849805, -41.6243576159548], [-38.40793316206393, 18.920316994303334, -10.795020729130798, 3.246742038075922], [35.164579944442224, -24.31157159229942, -31.15213306532565, -26.193010613835543]]
[[-15.379777735134503, -37.844364923635425, -41.755347510432294, -10.597228127051729], [39.15011395769959, -43.99579779457326, 21.258601551506914, -19.398430154651734], [38.69286619758692, -7.407664915859783, -33.393081198067776, 28.431060800624323], [-49.57831907291702, 2.428308178244812, 34.11223152089018, 23.767658448062008], [47.905456781794655, 28.35294800298925, 26.0236278292613, 9.680039107809655], 0, [-9.076114874574102, -24.762374364538587, -23.891614323168685, 3.116076153897808], [3.002277730328615, 17.76470015424914, -17.257817272240516, -34.74188180866875], [13.141800930567562, 38.85081627137474, -34.8639917921499, -48.98593730117731], [-9.614791249147245, -14.453714733289367, 38.84847043962519, -26.65360151552264], [-43.247112024583735, -27.03238299385957, -31.673935498235227, 30.552227510157223], [-8.092232719135993, -34.21791475446994, -11.834498734508237, 2.6325560661688883], [-17.954133312676603, -20.37850885307594, -31.047864477182298, 21.717087185442168], [-38.150583048822526, 19.177770786802355, -24.680536820571174, 24.249103163657054], 0, [-24.5897208817225, -46.004064571806815, -11.113514672100145, -9.453213405231878], [-15.285558935576773, 9.666631902126475, -7.7727823000732315, 41.7872917272836], [29.48533595789496, 10.231566863883515, 45.749740424917746, 20.65191194829154], [-46.87194196061512, 45.52495764002913, -29.60028066676933, -44.063796677195135], 0, [37.62636397954449, 48.901876742791444, -41.94844330551318, -25.16637641814965], 0, [-48.991514838126726, -8.33888473451568, -6.4325119914144935, -26.730740413008668], [6.608798840745337, 30.885274067753528, 2.3690081318134872, 40.31795644381933], [-6.038711216441428, -8.244517812231763, -20.22547034413821, 22.153789459614188], 0, 0, [-21.04638781031597, -13.54229826395946, 3.655988837188758, -19.186900116186745], [15.759051471102907, -14.042907912088133, -41.491807528373855, 48.16911488767765], [33.1226534708932, -16.047256841076383, -10.915703622248216, -47.737427380214115], 0, [-3.300032730270466, -19.54646366384033, 2.3063465135731747, 14.478741649010061], 0, [2.4004284194396845, 18.576726932456538, -32.396015123569285, 36.395185085375175], [-4.403041730048109, -4.476982545529239, 42.24644849778781, -2.660397443179704], [45.721819820125035, 24.741451192442597, -10.197816971677284, -5.240509940255222], [46.894099812966104, -9.556637524467526, -11.18144221782186, 43.69422148131791], [-22.219782649516073, 12.77540542027532, 0.28503230433155835, -36.502676698695566], 0, [0.5205696233696955, 5.53666204996761, 5.373100517694105, 39.960522003990036], 0, 0, [19.372815902442866, -1.9812058785611555, 45.844598775518435, 5.574581562496029], 0, 0, [-11.46225911508715, 15.663058958262425, -42.19121050493233, 33.514530969097194], 0, [38.35015395606709, -20.036192214266425, 34.00935056072419, -20.21107981696384], 0, [-13.95897392527251, 23.344321830511987, 47.587240201915264, -4.081703117733994], [10.240293760576016, -35.39656702860597, 45.75898819074618, -37.77851915973961], [-10.5979796776097, 9.91925820407139, -27.324002744570553, 6.3978067560107945], [43.0839072342191, -30.79870941138816, 24.659382579726042, 34.957411852257394], [-35.83392820334616, -6.986721239847604, 18.73093743398755, 2.9069236594421426], [-12.420942126492875, -28.14197630594556, 37.97516028830391, -6.899799670518249], [5.240253550899332, 3.0201924692447193, -32.82401512888211, 34.45494315075889], 0, 0, [39.686545108239486, -46.75652684798539, 7.512496014434966, -1.1595964490758845], [27.13569898604713, -11.835839382876323, -16.56325680908349, 31.975832254470177], [19.03401688623653, -35.687314741333644, -6.195647566432427, -7.182349905329154], 0, [23.038852343752325, -34.46749682011754, 47.24750535690261, 29.75451722745531], 0, 0, [-36.4380536152683, -32.36891354729286, 36.657301279162965, 17.728558629915057], [30.89343135787857, 9.73189072973667, -17.639368711839495, -26.386164277295954], 0, [-4.625792654999017, 7.606617202335364, 10.54489600734557, 35.34929550792161], [-19.226628869922024, -48.322056433313, 34.111064408063044, 36.19258691141235], 0, 0, [22.585825067401217, -7.012725843884446, 7.628844237583301, -18.176844360487554], 0, 0, 0, 0, [-42.352723226146914, 30.82702126059999, -21.95278327209138, -45.74170705126282], [2.367581277132217, -38.53389308869416, 40.03905029096123, 8.303266458507686], [-3.6104650670811793, -40.45047936090761, -32.006417072533644, -48.707048607545225], [-28.154030714711787, 25.56131389922487, -36.08739430639242, 23.757251857487034], [48.81900860320118, -29.754829313317575, -14.629273463800331, 20.430766160648005], [-28.39326624552726, 0.9030064618817022, 17.72855193526489, 28.31695411723794], [-40.23855908381828, 22.835284917680497, -39.072068283839315, 2.086610896427757], [-30.187079614911582, -40.100754845273215, -44.93431903359719, -48.29382508509127], [-39.77619202059122, 4.013882489841713, 16.09152969384543, -44.41550138284867], [-12.134640741543855, -26.20238801921042, 43.72014679622191, 7.913023468950023], 0, 0, 0, 0, 0, [-17.514565965779802, -23.20362400241034, -3.0502807923108364, 37.79441344010134], 0, [46.646242126890485, -49.81203363381314, 14.411485250546349, 3.9843828186897667], [-42.194012199569244, 37.901920213715655, 2.866570976517167, -20.711111429084816], 0, 0, [-39.71611912217111, -16.086245734660544, 32.190074025080776, 17.328911746834763], 0]
[[[-20.06874806820885, 21.039361298859916, 5.18714403709334, 5.639089289221097], [-10.585687905312511, 21.638150912415426, 11.64912939904579, -12.31415434654658], [-16.733458122027045, 18.123150935924272, -6.8879795940193915, -5.320492839039034], [-12.370353338316598, 41.0687492656549, 14.45920128002534, 7.436840423378207], [-38.40793316206393, 18.920316994303334, -10.795020729130798, 3.246742038075922]], [[-10.708505749385886, 16.811389955820886, 21.35852261461642, -26.24331388098784], [-4.550635960221896, 3.4833452682243333, 11.467449295037902, -10.462956429204638], [-0.6320518341531169, 7.586133560663065, 18.354222988974726, 1.666208863710274]], [[12.53143664033405, 23.32352310525704, 20.31910127193281, -30.702325256345773], [6.006484755090149, 8.942219799505772, 22.095419959737058, -22.07884989567154]], [], [[41.75980915996527, 36.88449106402287, 32.10610691118235, -18.397399121936143], [48.5063826614537, 34.45476828663213, 18.252505732349405, -15.257999858547514], [30.53453133087109, 15.875724083790104, 19.299581202379017, -9.165374881648091], [33.72639043624906, 26.723144338210474, 26.315966893122337, -21.422074434762106]], [[17.741142804448856, 25.761961800973026, -27.796623265232178, 12.668652605652163], [32.76122984658912, 34.60493043218705, -23.135615055603743, 20.92182023764873], [22.675697907678853, 23.18774555591449, -49.61385733160144, 11.090613476404975], [9.222699143016818, 29.838696456997795, -28.00335104040942, -9.187453693259464], [7.559155760544364, 20.154127768447623, -27.432178295089184, 11.22219171903609]], [[-29.154545613170836, 0.46739324781639624, -49.13555020475455, -19.111223678809885], [-18.964590485511156, -4.3154194340886605, -21.00034610621514, -8.290379397368675], [-19.571219093314475, -17.154530944276623, -21.817686260843374, -35.46718779842125], [-26.35257698195338, -14.741075687100434, -33.95328247723265, -17.385656968109252], [-30.26516637661296, -17.660112614903987, -46.32568198722181, -30.08530339998655]], [[8.483625129864173, 13.747395715321161, 13.927437430332532, 8.307592721890067]], [], [[-0.4722471307015894, -17.239057062230664, -19.799273164220853, -46.14300158607788], [-11.423434767771269, 6.121207342667034, -36.632900176985586, -35.39281850938983], [-4.185655495149476, -19.716941763565032, -46.13207834330285, -39.30445442459795], [-8.799559061404103, -6.65778410884689, -31.43849878849805, -41.6243576159548]], [[-41.22836632698631, 35.27063771889078, -20.75265385750784, -1.3882004384521238], [-47.14512226269034, 10.625316895299228, -19.117065316919014, 21.907971176696776]], [[36.40091338904237, -23.71763727160876, -15.684672868607088, -14.940357502607306], [34.79636667414073, -34.28538172939935, -16.82828442516002, -24.468914092680482], [13.397442977592519, -18.86511616112706, -22.314180622884006, -24.659608612387295], [19.471780958301622, -20.361706277083623, -36.013797225549595, -17.995762767855908], [35.164579944442224, -24.31157159229942, -31.15213306532565, -26.193010613835543]]]
[[-15.379777735134503, -37.844364923635425, -41.755347510432294, -10.597228127051729], [39.15011395769959, -43.99579779457326, 21.258601551506914, -19.398430154651734], [38.69286619758692, -7.407664915859783, -33.393081198067776, 28.431060800624323], [-49.57831907291702, 2.428308178244812, 34.11223152089018, 23.767658448062008], [47.905456781794655, 28.35294800298925, 26.0236278292613, 9.680039107809655], [-9.076114874574102, -24.762374364538587, -23.891614323168685, 3.116076153897808], [3.002277730328615, 17.76470015424914, -17.257817272240516, -34.74188180866875], [13.141800930567562, 38.85081627137474, -34.8639917921499, -48.98593730117731], [-9.614791249147245, -14.453714733289367, 38.84847043962519, -26.65360151552264], [-43.247112024583735, -27.03238299385957, -31.673935498235227, 30.552227510157223], [-8.092232719135993, -34.21791475446994, -11.834498734508237, 2.6325560661688883], [-17.954133312676603, -20.37850885307594, -31.047864477182298, 21.717087185442168], [-38.150583048822526, 19.177770786802355, -24.680536820571174, 24.249103163657054], [-24.5897208817225, -46.004064571806815, -11.113514672100145, -9.453213405231878], [-15.285558935576773, 9.666631902126475, -7.7727823000732315, 41.7872917272836], [29.48533595789496, 10.231566863883515, 45.749740424917746, 20.65191194829154], [-46.87194196061512, 45.52495764002913, -29.60028066676933, -44.063796677195135], [37.62636397954449, 48.901876742791444, -41.94844330551318, -25.16637641814965], [-48.991514838126726, -8.33888473451568, -6.4325119914144935, -26.730740413008668], [6.608798840745337, 30.885274067753528, 2.3690081318134872, 40.31795644381933], [-6.038711216441428, -8.244517812231763, -20.22547034413821, 22.153789459614188], [-21.04638781031597, -13.54229826395946, 3.655988837188758, -19.186900116186745], [15.759051471102907, -14.042907912088133, -41.491807528373855, 48.16911488767765], [33.1226534708932, -16.047256841076383, -10.915703622248216, -47.737427380214115], [-3.300032730270466, -19.54646366384033, 2.3063465135731747, 14.478741649010061], [2.4004284194396845, 18.576726932456538, -32.396015123569285, 36.395185085375175], [-4.403041730048109, -4.476982545529239, 42.24644849778781, -2.660397443179704], [45.721819820125035, 24.741451192442597, -10.197816971677284, -5.240509940255222], [46.894099812966104, -9.556637524467526, -11.18144221782186, 43.69422148131791], [-22.219782649516073, 12.77540542027532, 0.28503230433155835, -36.502676698695566], [0.5205696233696955, 5.53666204996761, 5.373100517694105, 39.960522003990036], [19.372815902442866, -1.9812058785611555, 45.844598775518435, 5.574581562496029], [-11.46225911508715, 15.663058958262425, -42.19121050493233, 33.514530969097194], [38.35015395606709, -20.036192214266425, 34.00935056072419, -20.21107981696384], [-13.95897392527251, 23.344321830511987, 47.587240201915264, -4.081703117733994], [10.240293760576016, -35.39656702860597, 45.75898819074618, -37.77851915973961], [-10.5979796776097, 9.91925820407139, -27.324002744570553, 6.3978067560107945], [43.0839072342191, -30.79870941138816, 24.659382579726042, 34.957411852257394], [-35.83392820334616, -6.986721239847604, 18.73093743398755, 2.9069236594421426], [-12.420942126492875, -28.14197630594556, 37.97516028830391, -6.899799670518249], [5.240253550899332, 3.0201924692447193, -32.82401512888211, 34.45494315075889], [39.686545108239486, -46.75652684798539, 7.512496014434966, -1.1595964490758845], [27.13569898604713, -11.835839382876323, -16.56325680908349, 31.975832254470177], [19.03401688623653, -35.687314741333644, -6.195647566432427, -7.182349905329154], [23.038852343752325, -34.46749682011754, 47.24750535690261, 29.75451722745531], [-36.4380536152683, -32.36891354729286, 36.657301279162965, 17.728558629915057], [30.89343135787857, 9.73189072973667, -17.639368711839495, -26.386164277295954], [-4.625792654999017, 7.606617202335364, 10.54489600734557, 35.34929550792161], [-19.226628869922024, -48.322056433313, 34.111064408063044, 36.19258691141235], [22.585825067401217, -7.012725843884446, 7.628844237583301, -18.176844360487554], [-42.352723226146914, 30.82702126059999, -21.95278327209138, -45.74170705126282], [2.367581277132217, -38.53389308869416, 40.03905029096123, 8.303266458507686], [-3.6104650670811793, -40.45047936090761, -32.006417072533644, -48.707048607545225], [-28.154030714711787, 25.56131389922487, -36.08739430639242, 23.757251857487034], [48.81900860320118, -29.754829313317575, -14.629273463800331, 20.430766160648005], [-28.39326624552726, 0.9030064618817022, 17.72855193526489, 28.31695411723794], [-40.23855908381828, 22.835284917680497, -39.072068283839315, 2.086610896427757], [-30.187079614911582, -40.100754845273215, -44.93431903359719, -48.29382508509127], [-39.77619202059122, 4.013882489841713, 16.09152969384543, -44.41550138284867], [-12.134640741543855, -26.20238801921042, 43.72014679622191, 7.913023468950023], [-17.514565965779802, -23.20362400241034, -3.0502807923108364, 37.79441344010134], [46.646242126890485, -49.81203363381314, 14.411485250546349, 3.9843828186897667], [-42.194012199569244, 37.901920213715655, 2.866570976517167, -20.711111429084816], [-39.71611912217111, -16.086245734660544, 32.190074025080776, 17.328911746834763]]

运行代码请点击:https://aistudio.baidu.com/aistudio/projectdetail/619613?shared=1

欢迎三连!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值