我如何让它只打印一个平均值列表? 我只需要它和我的np格式完全一样 数组,以便比较它们是否相同。你知道吗
代码:
import numpy as np
from pprint import pprint
centroids = np.array([[3,44],[4,15],[5,15]])
dataPoints = np.array([[2,4],[17,4],[45,2],[45,7],[16,32],[32,14],[20,56],[68,33]])
def size(vector):
return np.sqrt(sum(x**2 for x in vector))
def distance(vector1, vector2):
return size(vector1 - vector2)
def distances(array1, array2):
lists = [[distance(vector1, vector2) for vector2 in array2] for vector1 in array1]
#print lists.index(min, zip(*lists))
smallest = [min(zip(l,range(len(l)))) for l in zip(*lists)]
clusters = {}
for j, (_, i) in enumerate(smallest):
clusters.setdefault(i,[]).append(dataPoints[j])
pprint (clusters)
print'\nAverage of Each Point'
avgDict = {}
for k,v in clusters.iteritems():
avgDict[k] = sum(v)/ (len(v))
avgList = np.asarray(avgDict)
pprint (avgList)
distances(centroids,dataPoints)
电流输出:
{0: [array([16, 32]), array([20, 56])],
1: [array([2, 4])],
2: [array([17, 4]),
array([45, 2]),
array([45, 7]),
array([32, 14]),
array([68, 33])]}
Average of Each Point
array({0: array([18, 44]), 1: array([2, 4]), 2: array([41, 12])}, dtype=object)
期望输出:
[[18,44],[2,4],[41,12]]
或者任何最好的格式来比较我的数组/列表。我知道我应该只使用一种数据类型。你知道吗
你知道吗 你试着用最近的
centroids
的索引对dataPoints
进行聚类,并找出聚类点的平均位置吗?如果是,我建议使用numpy的一些广播规则来获得您需要的输出。你知道吗想想这个
它创建一个矩阵,显示
dataPoints
和centroids
之间的所有距离你可以用这个技巧计算最近质心的指数(为了可读性,它们被分成3行)
现在
t2
有了索引要找到#1簇,请使用布尔掩码
t2 == 0
或者只是计算一下你的平均值
当然,如果需要,后面的块可以在for循环中重写。你知道吗
在我看来,用numpy的惯例来制定解决方案可能是一个很好的做法。你知道吗
相关问题 更多 >
编程相关推荐