如何从给定的一个开始生成一些随机向量

时间:2015-12-02 13:35:13

标签: python numpy

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

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

上一个命令不起作用,因为数组形状不匹配。 我可以考虑使用for循环,但我正在尝试利用数组操作。

3 个答案:

答案 0 :(得分:2)

它是载体的外在产品:

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

答案 1 :(得分:2)

试试这个

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的broadcasting有效。

作为附注,我建议不要使用pylab。相反,请使用import as以包含指出here的模块。

答案 2 :(得分:2)

您可以将所需数组的维度传递给numpy.random.randn

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

要将每个向量乘以相同的随机数,您需要添加一个额外的轴:

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