Python 如何仅将字典中的值选择/格式化为列表或numpy数组?
我如何让它只打印一个平均值列表? 我只需要它与我的np格式完全相同 数组,以便比较它们是否相同 代码: 电流输出:Python 如何仅将字典中的值选择/格式化为列表或numpy数组?,python,arrays,list,dictionary,Python,Arrays,List,Dictionary,我如何让它只打印一个平均值列表? 我只需要它与我的np格式完全相同 数组,以便比较它们是否相同 代码: 电流输出: {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 Poi
{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]]
或者任何比较我的数组/列表的最佳格式。我知道我应该只使用一种数据类型。
您是否尝试通过最近质心的索引对数据点进行聚类,并找出聚类点的平均位置?如果是,我建议使用numpy的一些广播规则来获得所需的输出
想想这个,
np.linalg.normcentroids[None,:,:]-数据点[:,None,:],轴=-1
它创建一个矩阵,显示数据点和质心之间的所有距离
阵列[[40.01249805,11.18033989,11.40175425],
[ 42.3792402 , 17.02938637, 16.2788206 ],
[ 59.39696962, 43.01162634, 42.05948169],
[ 55.97320788, 41.77319715, 40.79215611],
[ 17.69180601, 20.80865205, 20.24845673],
[ 41.72529209, 28.01785145, 27.01851217],
[ 20.80865205, 44.01136217, 43.65775991],
[ 65.9241989 , 66.48308055, 65.520989 ]]
你可以通过这个技巧计算最近质心的指数,为了可读性,它们被分成3行
In:t0=质心[None,:,:]-数据点[:,None,:]
In:t1=np.linalg.normt0,轴=-1
In:t2=np.argmint1,轴=-1
现在t2有了指数
数组[1,2,2,2,0,2,0,2]
要查找1集群,请使用布尔掩码t2==0
In:dataPoints[t2==0]
Out:array[[16,32],
[20, 56]]
In:dataPoints[t2==1]
输出:数组[[2,4]]
In:dataPoints[t2==2]
Out:array[[17,4],
[45, 2],
[45, 7],
[32, 14],
[68, 33]]
或者只是计算一下你的平均值
In:np.meansdatapoints[t2==0],axis=0
Out:数组[18,44]
In:np.meansdatapoints[t2==1],axis=0
输出:数组[2,4]
In:np.meansdatapoints[t2==2],axis=0
输出:数组[41.4,12]
当然,如果需要,后面的块可以在for循环中重写
在我看来,按照numpy的惯例来制定解决方案可能是一种很好的做法。非常有效!正是我要找的!该程序一直运行良好,但我经常得到一个“空片平均值”错误。你介意帮我一点忙吗?另一位用户建议了一个可行的解决方案,但它并没有给my留下所需的集群数量。以下是该帖子的链接:
[[18,44],[2,4],[41,12]]