Python 如何从给定向量开始生成多个随机向量

Python 如何从给定向量开始生成多个随机向量,python,numpy,Python,Numpy,我有一个值数组,并想从中创建一个矩阵,其中每一行是我的起点向量乘以(正态)分布的样本。 这个矩阵的行数将根据我想要的样本数而变化 %pylab my_vec = array([1,2,3]) my_rand_vec = my_vec*randn(100) 最后一个命令无效,因为数组形状不匹配。 我可以考虑对循环使用,但我试图利用数组操作。它是向量的外积: my_rand_vec = numpy.outer(randn(100), my_vec) 试试这个 my_rand_vec = my_v

我有一个值数组,并想从中创建一个矩阵,其中每一行是我的起点向量乘以(正态)分布的样本。 这个矩阵的行数将根据我想要的样本数而变化

%pylab
my_vec = array([1,2,3])
my_rand_vec = my_vec*randn(100)
最后一个命令无效,因为数组形状不匹配。
我可以考虑对循环使用
,但我试图利用数组操作。

它是向量的外积:

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]
添加一个额外的维度,这样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]