วิธีง่ายๆในการสร้างเมทริกซ์ของตัวเลขสุ่ม


99

ฉันพยายามสร้างเมทริกซ์ของตัวเลขสุ่ม แต่วิธีแก้ปัญหาของฉันยาวเกินไปและดูน่าเกลียด

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

ซึ่งไม่สามารถอ่านได้อย่างมากและไม่พอดีกับบรรทัดเดียว

คำตอบ:


79

ดูที่numpy.random.rand :

Docstring: แรนด์ (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 ]])

97

คุณสามารถวาง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]])

วิธีรับ ints แบบสุ่ม
Jack Twain

42
numpy.random.random_integers(low, high, shape)เช่นnumpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov

คำศัพท์สำหรับสัญกรณ์วงเล็บคู่ที่ใช้ในลายเซ็นของการสุ่มคืออะไร? ฉันไม่คุ้นเคยกับมัน
Emile Victor

@EmileVictor numpy.random.randomเช่นเดียวกับnumpy.randomวิธีการอื่น ๆ ที่ยอมรับรูปร่างเช่น N-tuples ดังนั้น parantheses ภายนอกแทนการเรียกเมธอดnumpy.random.random()และ parantheses ด้านในเป็นน้ำตาลซินแทติกสำหรับสร้างอินสแตนซ์ทูเพิล(3, 3)ที่ส่งผ่านเข้าไปในฟังก์ชัน
Vivek Jha

2
numpy.random.random_integers()เลิกใช้แล้ว ใช้numpy.random.randint()แทน docs.scipy.org/doc/numpy/reference/generated/…
สูงสุด

17

ใช้np.random.randint()ตามที่np.random.random_integers()เลิกใช้แล้ว

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

5

ดูเหมือนว่าคุณกำลังใช้ Python ของแบบฝึกหัด Coursera Machine Learning Neural Network นี่คือสิ่งที่ฉันทำเพื่อ 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 ที่มีการแจกแจงแบบสุ่มหลอกแบบสุ่มล้อมรอบด้วย [ต่ำ, สูง] คุณสามารถทำได้ดังนี้:

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

ผลลัพธ์ต่อไปนี้จะแสดงเมทริกซ์ 2 คูณ 3 ของจำนวนเต็มสุ่มจาก 0 ถึง 10:

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) 

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 = จำนวนเต็ม (ลงนาม) ต่ำสุดที่จะดึงออกมาจากการแจกแจง
  • สูง (เป็นทางเลือก) = หากระบุไว้ค่าหนึ่งที่อยู่เหนือจำนวนเต็ม (เซ็น) ที่ใหญ่ที่สุดที่จะดึงออกมาจากการแจกแจง
  • ขนาด (เป็นทางเลือก) = รูปร่างผลลัพธ์คือถ้ารูปร่างที่กำหนดเป็นเช่น (m, n, k) จากนั้นจะวาดตัวอย่าง m * n * k
  • dtype (ทางเลือก) = dtype ที่ต้องการของผลลัพธ์

เช่น:

ตัวอย่างที่กำหนดจะสร้างอาร์เรย์ของจำนวนเต็มสุ่มระหว่าง 0 ถึง 4 ขนาดของมันจะเป็น 5 * 5 และมีจำนวนเต็ม 25 ตัว

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

ในการสร้างเมทริกซ์ 5 คูณ 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]




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 (แถว, คอลัมน์) สร้างตัวเลขสุ่มระหว่าง 0 ถึง 1 ตามพารามิเตอร์ที่ระบุ (m, n) ที่กำหนด ดังนั้นใช้มันเพื่อสร้างเมทริกซ์ (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  ]])
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.