gpt4 book ai didi

Python:来自数组的随机矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:05 25 4
gpt4 key购买 nike

我想从一个向量生成,为简单起见,我们可以将其称为“serie1”,这是另一个维度为 1000x1 的向量,其中这个新向量的每个元素都是向量“serie1”的 j 个随机元素的总和。

我正在考虑从维度为 1000xj 的向量创建一个随机矩阵并将它们水平求和。

你建议用 Python 怎么做?

为了得到一个随机向量我可以做

Vector=np.random.choice(serie1, 1000, replace=True)

但我不知道如何进行以及是否有有效的解决方案。

最佳答案

基本问题是为 1000 行获取 j 个唯一元素。我们不能直接在那里使用 np.random.choice(.....replace=True),因为那样我们就没有 j 唯一元素。为了解决我们的问题,一种矢量化方法是使用形状为 (1000,len(input_array)) 的随机矩阵,沿第二个轴执行 argsort 并获得 j 每行的唯一索引,然后用它索引输入数组,最后沿第二个轴求和。

要实现它,我们有两种方法 -

def app1(serie1, j, N=1000):
idx = np.random.rand(N,serie1.size).argsort(1)[:,:j]
return serie1[idx].sum(1)

使用高效的 np.argpartition 选择随机 j 元素,然后使用 np.take 进行高效的索引 -

def app2(serie1, j, N=1000):
idx = np.random.rand(N,serie1.size).argpartition(j,axis=1)[:,:j]
return np.take(serie1, idx).sum(1)

示例运行以演示创建索引 idx -

In [35]: serie1 = np.random.randint(0,9,(20))

In [36]: idx = np.random.rand(1000,serie1.size).argsort(1)[:,:5]

In [37]: idx
Out[37]:
array([[16, 13, 19, 0, 15],
[ 7, 4, 13, 15, 14],
[ 8, 3, 15, 1, 9],
...,
[11, 15, 17, 4, 19],
[19, 0, 3, 7, 9],
[10, 1, 19, 12, 6]])

验证均匀随机抽样-

In [81]: serie1 = np.arange(20)

In [82]: j = 5

In [83]: idx = np.random.rand(1000000,serie1.size).argsort(1)[:,:j]

In [84]: np.bincount(idx.ravel())
Out[84]:
array([250317, 250298, 250645, 249544, 250396, 249972, 249492, 250512,
249968, 250133, 249622, 250170, 250291, 250060, 250102, 249446,
249398, 249003, 250249, 250382])

在输入数组中 20 元素的长度上具有相当相等的计数,我认为它分布非常均匀。

运行时测试 -

In [140]: serie1 = np.random.randint(0,9,(20))

In [141]: j = 5

# @elcombato's soln
In [142]: %timeit [sum(sample(serie1, j)) for _ in range(1000)]
100 loops, best of 3: 10.7 ms per loop

# Posted solutions in this post
In [143]: %timeit app1(serie1, j, N=1000)
...: %timeit app2(serie1, j, N=1000)
...:
1000 loops, best of 3: 943 µs per loop
1000 loops, best of 3: 870 µs per loop

关于Python:来自数组的随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com