web-dev-qa-db-ja.com

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

乱数の行列を作成しようとしていますが、解決策が長すぎて見苦しいです

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行に収まりません。

67
user2173836

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

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]])
88
Pavel Anossov

np.random.randint()を使用してください。numpy.random.random_integers()は非推奨です。

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

Coursera Machine Learning Neural Network演習の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)
3
Lokesh Sharma

「乱数の行列」と言うとき、numpyをPavelとして使用できます https://stackoverflow.com/a/15451997/6169225 上記、この場合、私はあなたにそれを仮定していますこれらの(疑似)乱数がどの分布に従うかは関係ありません。

ただし、特定のディストリビューションが必要な場合(均一なディストリビューションに興味があると思います)、numpy.randomには非常に便利なメソッドがあります。たとえば、[low、high]で囲まれた擬似ランダムな一様分布を持つ3x2マトリックスが必要だとしましょう。次のようにこれを行うことができます:

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

uniformは、このライブラリでサポートされている任意の数のディストリビューションに置き換えることができます。

さらに読む: https://docs.scipy.org/doc/numpy/reference/routines.random.html

1
Marquistador

ランダムな整数の配列を作成する簡単な方法は次のとおりです。

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

以下は、0から10までのランダムな整数の2行3列の行列を出力します。

a = np.random.randint(10, size=(2,3))
1
Runner
x = np.int_(np.random.Rand(10) * 10)

10個のうちの乱数の場合、20個のうち20個を掛ける必要があります。

Map-reduceを使用した回答:-

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
1
GodMan
random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
for i in range(rows):
    print random_matrix[i]
1
PythonUser
#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