如何解决使用numpy.take随机选择2d点
问题设置:
-
points
-长度为numpy.array
的2DN
。 -
centroids
-我从numpy.array
算法得到的2DK-Means
,长度为k
N。 - 作为
MLE
算法的质心初始化例程,我想为points
中的每个点分配一个centroids
中的随机质心。
必需的输出:
- 从
numpy.array
中随机选择的2D点组成的形状(N,2)的centroids
我的努力
- 我尝试将
numpy.take
与numpy.random.choice
一起使用,如Code 1
所示,但它没有返回所需的输出。
代码1:
import numpy as np
a = np.random.randint(1,10,10).reshape((5,2))
idx = np.random.choice(5,20)
np.take(a,idx)
Out: array([6,2,3,8,5,6,5])
从numpy.take documentation page中,我了解到它是从展平数组中选择项目的,这不是我所需要的。
对于如何完成此任务的任何想法,我将不胜感激。预先感谢您的帮助。
解决方法
一种方法是对索引进行采样,然后使用它为centroids
的第一维度建立索引:
idx = np.random.choice(np.arange(len(centroids)),size=len(a))
out = centroids[idx]
,
与@Quang Hoang
的答案类似,但我认为更加直观:
a = np.random.randint(1,10,10).reshape((5,2))
n_sampled_points = 20
a[np.random.randint(0,a.shape[0],n_sampled_points)]
干杯。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。