如何从Numpy 2D数组中无重复随机抽取n行?
解决Numpy数组无重复随机抽取n行的问题
原代码的问题
- 索引范围错误:你用了
arr.shape[1](数组的列数)来生成索引范围,正确的应该是arr.shape[0](数组的行数)。 - 抽取数量错误:
random.sample的第二个参数设为1,只会抽取1个行索引,自然只返回单行,需要改成你需要的n。
方案一:修正random.sample用法
import random import numpy as np # 定义你的数组 arr = np.array([[996.924, 265.879, 191.655], [996.924, 265.874, 191.655], [996.925, 265.884, 191.655], [997.294, 265.621, 192.224], [997.294, 265.643, 192.225], [997.304, 265.652, 192.223]], dtype=np.float32) n = 3 # 设置你要抽取的行数 rows_id = random.sample(range(arr.shape[0]), n) # 基于行数生成无重复索引 sampled_arr = arr[rows_id, :] # 抽取对应行
方案二:用Numpy原生方法(更推荐)
使用np.random.choice,通过replace=False确保无重复抽取,更贴合Numpy的使用场景:
import numpy as np # 定义你的数组 arr = np.array([[996.924, 265.879, 191.655], [996.924, 265.874, 191.655], [996.925, 265.884, 191.655], [997.294, 265.621, 192.224], [997.294, 265.643, 192.225], [997.304, 265.652, 192.223]], dtype=np.float32) n = 3 # 设置你要抽取的行数 rows_id = np.random.choice(arr.shape[0], size=n, replace=False) sampled_arr = arr[rows_id, :]
注意事项
- 确保
n的取值不超过数组的总行数,否则会触发索引错误。
内容的提问来源于stack exchange,提问作者Spatial Digger
相关产品推荐
相关产品推荐

