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]索引了。

    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度