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]