簡體   English   中英

如何從給定的一個開始生成許多隨機向量

[英]How to generate a number of random vectors starting from a given one

我有一個值數組,並希望從中創建一個矩陣,其中每一行是我的起點向量乘以(正態)分布的樣本。 然后,此矩陣的行數將根據我想要的樣本數而變化。

%pylab
my_vec = array([1,2,3])
my_rand_vec = my_vec*randn(100)

最后一個命令不起作用,因為數組形狀不匹配。 我可以考慮使用for循環,但是我試圖利用數組操作。

它是向量的外積:

my_rand_vec = numpy.outer(randn(100), my_vec)

嘗試這個

my_rand_vec = my_vec[None,:]*randn(100)[:,None]

對於小數字,例如

import numpy as np
my_vec = np.array([1,2,3])
my_rand_vec = my_vec[None,:]*np.random.randn(5)[:,None]
my_rand_vec

# array([[ 0.45422416,  0.90844831,  1.36267247],
#        [-0.80639766, -1.61279531, -2.41919297],
#        [ 0.34203295,  0.6840659 ,  1.02609885],
#        [-0.55246431, -1.10492863, -1.65739294],
#        [-0.83023829, -1.66047658, -2.49071486]])

您的解決方案my_vec*rand(100)不起作用,因為*對應於逐元素乘法,僅當兩個數組具有相同形狀時才起作用。

您要做的是使用[None,:][:,None]添加一個附加維度[:,None]以便numpy的廣播有效。

另外,我建議不要使用pylab 而是使用import as來包含此處指出的模塊。

您可以將所需數組的尺寸傳遞給numpy.random.randn

my_rand_vec = my_vec*np.random.randn(100,3)

要將每個向量乘以相同的隨機數,您需要添加一個額外的軸:

my_rand_vec = my_vec*np.random.randn(100)[:,np.newaxis]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM