创建随机数矩阵的简单方法


97

我正在尝试创建一个随机数矩阵,但是我的解决方案太长且看起来很丑

random_matrix = [[random.random() for e in range(2)] for e in range(3)]

看起来不错,但是在我的实现中

weights_h = [[random.random() for e in range(len(inputs[0]))] for e in range(hiden_neurons)]

这是非常不可读的,并且不能放在一行上。

Answers:


75

看看numpy.random.rand

文档字符串:rand(d0,d1,...,dn)

给定形状的随机值。

创建给定形状的数组,并使用上均匀分布的随机样本传播它[0, 1)


>>> import numpy as np
>>> np.random.rand(2,3)
array([[ 0.22568268,  0.0053246 ,  0.41282024],
       [ 0.68824936,  0.68086462,  0.6854153 ]])

95

您可以删除range(len())

weights_h = [[random.random() for e in inputs[0]] for e in range(hiden_neurons)]

但实际上,您可能应该使用numpy。

In [9]: numpy.random.random((3, 3))
Out[9]:
array([[ 0.37052381,  0.03463207,  0.10669077],
       [ 0.05862909,  0.8515325 ,  0.79809676],
       [ 0.43203632,  0.54633635,  0.09076408]])

如何获得随机整数?
杰克·吐温2014年

41
numpy.random.random_integers(low, high, shape),例如numpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov 2014年

随机签名中使用双括号符号的术语是什么?我不熟悉。
Emile Victor,

numpy.random.random像其他许多numpy.random方法一样,@ EmileVictor 接受形状,即N元组。因此,实际上外部括号代表调用方法numpy.random.random(),而内部括号是用于实例化(3, 3)传递给函数的元组的语法糖。
Vivek Jha

2
numpy.random.random_integers()不推荐使用。使用numpy.random.randint()代替。docs.scipy.org/doc/numpy/reference/generated/...
马克斯

15

使用np.random.randint()numpy.random.random_integers()是过时

random_matrix = numpy.random.randint(min_val,max_val,(<num_rows>,<num_cols>))

5

看起来您正在执行Coursera机器学习神经网络练习的Python实现。这是我为randInitializeWeights(L_in,L_out)做的

#get a random array of floats between 0 and 1 as Pavel mentioned 
W = numpy.random.random((L_out, L_in +1))

#normalize so that it spans a range of twice epsilon
W = W * 2 * epsilon

#shift so that mean is at zero
W = W - epsilon

3

首先,创建numpy数组,然后将其转换为matrix。请参见下面的代码:

import numpy

B = numpy.random.random((3, 4)) #its ndArray
C = numpy.matrix(B)# it is matrix
print(type(B))
print(type(C)) 
print(C)


2

当您说“随机数矩阵”时,您可以使用numpy作为上述的Pavel https://stackoverflow.com/a/15451997/6169225,在这种情况下,我假设与您无关的是,这些分布是什么(伪)坚持随机数。

但是,如果您需要特定的分布(我想您对统一分布很感兴趣),则numpy.random有非常有用的方法为您服务。例如,假设您要一个3x2矩阵,其伪随机均匀分布以[low,high]为边界。您可以这样做:

numpy.random.uniform(low,high,(3,2))

注意,您可以用uniform此库支持的任意数量的发行版代替。

进一步阅读:https : //docs.scipy.org/doc/numpy/reference/routines.random.html


2

创建随机整数数组的一种简单方法是:

matrix = np.random.randint(maxVal, size=(rows, columns))

下面的代码输出从0到10的2到3的随机整数矩阵:

a = np.random.randint(10, size=(2,3))

2

为了创建随机数数组,NumPy使用以下方法创建数组:

  1. 实数

  2. 整数

使用随机实数创建数组 有2个选项

  1. random.rand(用于均匀分布所生成的随机数)
  2. random.randn(用于所生成的随机数的正态分布)

随机兰德

import numpy as np 
arr = np.random.rand(row_size, column_size) 

随机兰德

import numpy as np 
arr = np.random.randn(row_size, column_size) 

使用随机整数创建数组

import numpy as np
numpy.random.randint(low, high=None, size=None, dtype='l')

哪里

  • low =要从分布中得出的最低(有符号)整数
  • 高(可选)=如果提供,则从分布中得出的最大(有符号)整数上方
  • size(可选)=输出形状,即如果给定形状为例如(m,n,k),则绘制m * n * k个样本
  • dtype(可选)=结果的所需dtype。

例如:

给定的示例将生成一个介于0和4之间的随机整数数组,其大小将为5 * 5,并具有25个整数

arr2 = np.random.randint(0,5,size = (5,5))

为了创建5 x 5矩阵,应将其修改为

arr2 = np.random.randint(0,5,size =(5,5)),将乘法符号*更改为逗号,#

[[2 1 1 0 1] [3 2 1 4 3] [2 3 0 3 3] [1 3 1 0 0] [4 1 2 0 1]]

eg2:

给定的示例将生成一个介于0和1之间的随机整数数组,其大小将为1 * 10并具有10个整数

arr3= np.random.randint(2, size = 10)

[0 0 0 0 1 1 0 0 1 1]


1
random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
for i in range(rows):
    print random_matrix[i]

1

使用map-reduce的答案:-

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))

0
#this is a function for a square matrix so on the while loop rows does not have to be less than cols.
#you can make your own condition. But if you want your a square matrix, use this code.

import random

import numpy as np

def random_matrix(R, cols):

        matrix = []

        rows =  0

        while  rows < cols:

            N = random.sample(R, cols)

            matrix.append(N)

            rows = rows + 1

    return np.array(matrix)

print(random_matrix(range(10), 5))
#make sure you understand the function random.sample

0

numpy.random.rand(row,column)根据给定的指定(m,n)参数生成0到1之间的随机数。因此,使用它创建一个(m,n)矩阵,并将该矩阵乘以范围限制,然后将其与上限相加。

分析:如果生成零,则仅将保持下限,但是如果生成零,将仅保持上限。顺便说一句,使用rand numpy生成限制,您可以生成极端所需的数字。

import numpy as np

high = 10
low = 5
m,n = 2,2

a = (high - low)*np.random.rand(m,n) + low

输出:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.