从numpy数组中选择两个随机行

Posted

技术标签:

【中文标题】从numpy数组中选择两个随机行【英文标题】:Select two random rows from numpy array 【发布时间】:2014-05-15 04:19:29 【问题描述】:

我有一个 numpy 数组

[[  5.80084178e-05   1.20779787e-02  -2.65970238e-02]
 [ -1.36810406e-02   6.85722519e-02  -2.60280724e-01]
 [  4.21996519e-01  -1.43644036e-01   2.12904690e-01]
 [  3.03098198e-02   1.50170659e-02  -1.09683402e-01]
 [ -1.50776089e-03   7.22369575e-03  -3.71181228e-02]
 [ -3.04448275e-01  -3.66987035e-01   1.44618682e-01]
 [ -1.46744916e-01   3.47112167e-01   3.09550267e-01]
 [  1.16567762e-03   1.72858807e-02  -9.39297514e-02]
 [  1.25896836e-04   1.61310167e-02  -6.00253128e-02]
 [  1.65062798e-02   1.96933143e-02  -4.26540031e-02]
 [ -3.78020965e-03   7.51770012e-03  -3.67852984e-02]]

我想从中选择任意两个随机行,这样输出将是-

[[ -1.36810406e-02   6.85722519e-02  -2.60280724e-01]
[  1.16567762e-03   1.72858807e-02  -9.39297514e-02]]

【问题讨论】:

您遇到了什么问题? 请阅读这篇文章:***.com/q/9089156/3248346 我想我已经正确而简洁地回答了你的问题,对吗? 发布您的代码,您提供了难以处理的示例,并且您显然正在导入*,您不应该这样做 【参考方案1】:

我相信您只是在寻找:

#Create a random array
>>> a = np.random.random((5,3))
>>> a
array([[ 0.26070423,  0.85704248,  0.82956827],
       [ 0.26840489,  0.75970263,  0.88660498],
       [ 0.5572771 ,  0.29934986,  0.04507683],
       [ 0.78377012,  0.66445244,  0.08831775],
       [ 0.75533819,  0.05128844,  0.49477196]])

#Select random rows based on the rows in your array
#The 2 value can be changed to select any number of rows
>>> b = np.random.randint(0,a.shape[0],2)
>>> b
array([1, 2])

#Slice array a
>>> a[b]
array([[ 0.26840489,  0.75970263,  0.88660498],
       [ 0.5572771 ,  0.29934986,  0.04507683]])

或者简单地说:

a[np.random.randint(0,a.shape[0],2)]

【讨论】:

它给了我不同的输出 [[-0.00378021 0.0075177 -0.0367853 ] [-0.00150776 0.0072237 -0.03711812]] 正是随机输出。要重现您的结果,如图所示,如果我计数正确,它将是 arr[[1,11]] 它不会给出唯一的随机行。我该怎么办? @DummyGuy 考虑改用np.random.choice(a.shape[0], 2, replace=False)【参考方案2】:

你的意思是“数组”吗?这对我来说就像一个清单。

尝试:

import random
out_list = random.sample(your_numpy_list,2)

这将为您提供一个包含两个不同成员的列表(请参阅documentation for random)

【讨论】:

它给了我TypeError: object of type 'int' has no len() 嗯。你能发布整个错误,以及你运行的代码吗?如果你去here并粘贴下面的代码,你将能够看到它工作:import randomnumpy_list = [[6,5,4],[8,7,6],[4,3,2]]out_list = random.sample(numpy_list,2)print out_list Traceback (most recent call last): File "C:\Python27\PCA.py", line 113, in <module> out_list = random.sample(pcar,2) File "C:\Python27\lib\random.py", line 318, in sample n = len(population) TypeError: object of type 'int' has no len() pcar 是什么?它应该是您在帖子顶部打印的数组。 是的,上面印有数组。【参考方案3】:

假设你的数组是:

import numpy as np
a=np.random.random((11,3))

像这样获取两个随机行:

a[randint(0,11,size=2)]

获取两个随机列:

[a[:,x] for x in randint(0,3,size=2)]

您可能还想看看random

【讨论】:

我已经尝试过randint,但我无法理解将列表名称放在哪里。我的名单名称是pcar。你能告诉我它是如何工作的吗? @atomh33ls 这会选择列并创建一个 numpy 数组列表。如果您想从 x 中选择列,我相信您想要 a[:,x] @Ophion 正确,谢谢 - 我已将其从按列转换为按行以更好地匹配问题。 @DummyGuy 和randint 定义随机选择整数的范围。 size 参数定义了随机整数的输出数组的形状(在您的情况下,您只需要 2 个)。

以上是关于从numpy数组中选择两个随机行的主要内容,如果未能解决你的问题,请参考以下文章

从数据库中选择一个随机行

从文件中选择随机行

如何从 SQL 数据库表中选择随机行? [复制]

从 sqlite 表中选择随机行

从mysql中的大表中快速选择随机行

从mysql中的大表中快速选择随机行