从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 random
numpy_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数组中选择两个随机行的主要内容,如果未能解决你的问题,请参考以下文章