乱数の行列を作成しようとしていますが、解決策が長すぎて見苦しいです
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行に収まりません。
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 ]])
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]])
np.random.randint()を使用してください。numpy.random.random_integers()は非推奨です。
random_matrix = numpy.random.randint(min_val,max_val,(<num_rows>,<num_cols>))
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
まず、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)
「乱数の行列」と言うとき、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
ランダムな整数の配列を作成する簡単な方法は次のとおりです。
matrix = np.random.randint(maxVal, size=(rows, columns))
以下は、0から10までのランダムな整数の2行3列の行列を出力します。
a = np.random.randint(10, size=(2,3))
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))
random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
for i in range(rows):
print random_matrix[i]
#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