乱数の行列を作成する簡単な方法


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)]

これは非常に読みにくく、1行に収まりません。

回答:


75

numpy.random.randを見てください

Docstring: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]])

ランダムな整数を取得する方法?
Jack Twain 14

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

ランダムのシグニチャーで使用されている二重括弧表記の用語は何ですか?よくわかりません。
エミールビクター

numpy.random.random他の多くのnumpy.randomメソッドと同様に、@ EmileVictor は形状、つまりNタプルを受け入れます。つまり、外側の括弧はメソッドの呼び出しを表しnumpy.random.random()、内側の括弧は(3, 3)関数に渡されるタプルをインスタンス化するための構文糖です。
Vivek Jha 2018年

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

「乱数の行列」と言うときは、上記のPavel https://stackoverflow.com/a/15451997/6169225としてnumpyを使用できます。この場合、これらの分布は無関係であると想定しています(疑似)乱数が付着します。

ただし、特定の分布が必要な場合(均一分布に興味があると思います)にnumpy.randomは、非常に便利な方法があります。たとえば、[low、high]で囲まれた疑似ランダム均一分布の3x2マトリックスが必要だとします。あなたはそうすることができます:

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(生成された乱数の正規分布用)

random.rand

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

random.randn

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 =分布から引き出される最小の(符号付き)整数
  • high(オプション)=提供されている場合、分布から抽出される最大の(符号付き)整数の1つ上
  • 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]]

例2:

与えられた例は、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)行列を作成し、範囲制限の行列を乗算して、それを上限と合計します。

分析:ゼロが生成される場合、下限のみが保持されますが、1が生成される場合、上限のみが保持されます。つまり、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  ]])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.