firewrk 2021-04-16 17:18 采纳率: 0%
浏览 37

这是哪里错了?我就觉得是个二维列表啊,怎么是float?

 

#HDPoint.py
from functools import reduce
import random
class HDPoints:
    def __init__(self,ls):
        self.points=ls
    def centerpoint(self):
        cpoint=[]
        lenth=len(self.points[0])
        for i in range(lenth):
            cpoint.append(reduce(lambda a,b:a[i]+b[i],self.points))/float(len(self.points))
        return cpoint
    def minkowski(self,x,y,p):
            sum=0
            for i in range(len(x)):
                sum+=abs(x[i]-y[i])**p
            if p!=0:
                return sum**(1/p)
            else:
                return sum
    def farthestpoint(self,p):
        cpoint=self.centerpoint()
        maxk=0
        for i in range(len(self.points)):
            s=self.minkowski(cpoint,self.points[i],p)
            if s>self.minkowski(cpoint,self.points[maxk],p):
                maxk=i
        return (maxk,s)
    def farthest2point(self,p):
        maxspoints=[]
        maxs=0
        for i in range(len(self.points)-1):
            for j in range(i+1,len(self.points)):
                s=self.minkowski(self.points[i],self.points[j],p)
                if s>maxs:
                    maxs=s
                    maxpoints=[i,j,maxs]
        return maxpoints
points=[]
x=random.randint(50,100)
y=random.randint(5,10)
p=random.randint(0,6)
for i in range(x):
    a=[]
    for j in range(y):
        a.append(random.random())
    points.append(a)
#print(points)
hdpoints=HDPoints(points)
print(hdpoints.centerpoint())
print(hdpoints.minkowski(points[1],points[0],p))
print(hdpoints.farthestpoint(p))
print(hdpoints.farthest2point(p))

题目: 定义一个高维空间样本点集类HDPoints,须包含以下数据属性与方法属性:

 (a)数据属性self.points:类型为列表,由多个子列表构成,每个子列表表示高维空间中的一个数据点,且数据维度可以任意,并通过初始化构造函数获得。

    (b)方法属性centerpoint(self):计算点集的中心点。

(c)方法属性minkowski (self, x, y, p):计算两点x和y之间的闵可夫斯基距离,p为非负整数,用p=0情形表示切比雪夫距离。由此定义的距离称为p-闵氏距离,其数学定义如下:

    (d)方法属性farthestpoint(self, p):找出离中心点p-闵氏距离最远的点,返回在self.points中的下标以及最大距离。

    (e)方法属性farthest2points(self, p):找出点集self.points中p-闵氏距离最远的两点,返回两点在self.points中的下标及其最大距离。

接一下来,实例化类HDPoints,利用random模块,随机产生至少50个高维空间数据点,样本点的维度至少在5以上,且每个分量取值服从区间[0,1]上的均匀分布。同时,随机产生一个0~5之间的一个非负整数,赋值传递给p-闵氏距离函数中的参数p,对HDPoints实例对象的全部自定义方法属性(即centerpoint()、minkowski()、farthestpoint()和farthest2points())进行功能测试。

  • 写回答

3条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-04-16 17:33
    关注

    问题在lambda函数中,reduce传入的参数self.points的确是一个二维列表,每一行又是一个2元组或列表,被解包成两个浮点数a和b,浮点数自然不能a[i]或b[i]索引了。

    评论

报告相同问题?

悬赏问题

  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚