使用numpy.take随机选择2d点

问题描述

问题设置:

  • points-长度为numpy.array的2D N
  • centroids-我从numpy.array算法得到的2D K-Means,长度为k N。
  • 作为MLE算法的质心初始化例程,我想为points中的每个点分配一个centroids中的随机质心。

必需的输出:

  • numpy.array 中随机选择的2D点组成的形状(N,2)的centroids

我的努力

  1. 我尝试将numpy.takenumpy.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)]

干杯。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...