Hướng dẫn dùng np shuffle python

Hoán vị ngẫu nhiên trong Numpy

Nội Dung

  • 1. Hoán vị ngẫu nhiên là gì?
  • 2. Xáo trộn phần tử trong mảng
  • 3. Tạo hoán vị phần tử trong mảng

Trong toán học, hoán vị là mỗi cách sắp xếp n phần tử của tập hợp A theo một thứ tự nào đó được gọi là một hoán vị của n phần tử trong tập A.

Trong mảng Numpy, một hoán vị đề cập đến một sự sắp xếp của các phần tử thuộc trong mảng.Ví dụ [3, 2, 1] là hoán vị của [1, 2, 3] và ngược lại.

Mô-đun Numpy cung cấp hai hàm thường được sử dụng cho hoán vị phần tử trong mảng Numpy đó là:

  • Hàm shuffle() – xáo trộn các phần tử trong mảng
  • Hàm permutation() – hoán vị các phần tử trong mảng

2. Xáo trộn phần tử trong mảng

Việc xáo trộn các phần tử trong mảng có nghĩa là thực hiện đổi lại vị trí của các phần tử ban đầu thành các vị trí khác ngẫu nhiên trong mảng. Để làm được việc này, chúng ta cần sử dụng hàm random.shuffle() – hàm này nhận vào một mảng ban đầu và thực hiện xáo trộn các vị trí phần tử trong mảng.

Ví dụ dưới đây, sử dụng hàm random.shuffle() để xáo trộn các vị trí phần tử có trong mảng 1 chiều như sau:

from numpy import random
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

random.shuffle(arr)

print(arr)

Kết quả:

[4 2 5 3 1]

Lưu ý: Khi thực thi lại chương trình, một mảng với các phần tử tại ví trị mới sẽ được tạo ra.

Tương tự như mảng 1 chiều, ta cũng có thể sử dụng hàm random.shuffle() để xáo trộn vị trí phần tử có trong mảng 2 chiều như sau:

from numpy import random
import numpy as np

arr = np.array([
    [1, 2, 3], 
    [4, 5, 0],
    [8, 2, 6],
    [1, 7, 4],
    [5, 2, 9]
])

random.shuffle(arr)

print(arr)

Kết quả:

[[5 2 9]
 [4 5 0]
 [1 7 4]
 [1 2 3]
 [8 2 6]]

Lưu ý: Vì trong mảng 2 chiều, các phần tử sẽ là mảng 1 chiều. Vậy nên, khi xáo trộn các vị trí phần tử có trong mảng 2 chiều thì việc này thực chất là xáo trộn các mảng 1 chiều thuộc trong mảng 2 chiều ban đầu.

3. Tạo hoán vị phần tử trong mảng

Chúng ta có thể tạo ra một mảng hoán vị từ một mảng ban đầu thông qua hàm random.permutation() – hàm này truyền vào một mảng cần hoán vị và thực hiện hoán vị ngẫu nhiên một dãy hoặc trả về một dãy đã hoán vị. 

Nếu mảng nhập vào hàm random.permutation() là một mảng nhiều chiều, nó chỉ được hoán vị dọc trục mà ta chỉ định cho nó (trục dọc hoặc trục ngang)

Ví dụ dưới đây, tạo hoán vị ngẫu nhiên các phần tử của mảng 1 chiều bằng cách sử dụng hàm random.permutation() như sau:

from numpy import random
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(random.permutation(arr))

Kết quả:

[1 5 3 2 4]

Ví dụ tiếp theo, tạo hoán vị ngẫu nhiên các phần tử trong mảng 2 chiều dựa theo trục dọc bằng cách sử dụng hàm random.permutation() như sau:

from numpy import random
import numpy as np

arr = np.array([ 
    [1, 2, 3], 
    [4, 5, 0], 
    [8, 2, 6], 
    [1, 7, 4], 
    [5, 2, 9] 
])

print(random.permutation(arr))

Kết quả:

[[4 5 0]
 [8 2 6]
 [1 2 3]
 [5 2 9]
 [1 7 4]]

Ngẫu nhiên là một mô-đun có trong thư viện NumPy. Mô-đun này chứa các hàm được sử dụng để tạo số ngẫu nhiên. Mô-đun này chứa một số phương pháp tạo dữ liệu ngẫu nhiên đơn giản, một số hàm hoán vị và phân phối cũng như các hàm tạo ngẫu nhiên.

Các bài viết liên quan:

Tất cả các chức năng trong một mô-đun ngẫu nhiên như sau:

Random data

Dữ liệu ngẫu nhiên đơn giản có các chức năng sau:

  1. p.random.rand (d0, d1, …, dn)

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo ra các số hoặc giá trị ngẫu nhiên trong một hình dạng nhất định.

Thí dụ:

import numpy as np  
a=np.random.rand(5,2)  
a  

Output:

Hướng dẫn dùng np shuffle python

  1. np.random.randn (d0, d1, …, dn)

Hàm này của mô-đun ngẫu nhiên trả về một mẫu từ phân phối “chuẩn thông thường”.

Thí dụ:

import numpy as np  
a=np.random.randn(2,2)  
a

Output:

  1. np.random.randint (low [, high, size, dtype])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo ra các số nguyên ngẫu nhiên từ bao gồm (thấp) đến loại trừ (cao).

Thí dụ:

import numpy as np  
a=np.random.randint(3, size=10)  
a

Output:

  1. np.random.random_integers (low[, high, size])

Hàm này của mô-đun ngẫu nhiên được sử dụng để tạo số nguyên ngẫu nhiên kiểu np.int giữa thấp và cao.

Thí dụ:

import numpy as np  
a=np.random.random_integers(3)  
a  
b=type(np.random.random_integers(3))  
b  
c=np.random.random_integers(5, size=(3,2))  
c  

Output:

  1. np.random.random_sample ([size])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo số lượng phao ngẫu nhiên trong khoảng thời gian nửa mở [0.0, 1.0).

Thí dụ:

import numpy as np  
a=np.random.random_sample()  
a  
b=type(np.random.random_sample())  
b  
c=np.random.random_sample((5,))  
c  

Output:

  1. np.random.random ([size])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo số lượng phao ngẫu nhiên trong khoảng thời gian nửa mở [0.0, 1.0).

Thí dụ:

import numpy as np  
a=np.random.random()  
a  
b=type(np.random.random())  
b  
c=np.random.random((5,))  
c  

Output:

  1. np.random.ranf ([size])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo số lượng phao ngẫu nhiên trong khoảng thời gian nửa mở [0.0, 1.0).

Thí dụ:

import numpy as np  
a=np.random.ranf()  
a  
b=type(np.random.ranf())  
b  
c=np.random.ranf((5,))  
c  

Output:

  1. np.random.sample ([size])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo số lượng phao ngẫu nhiên trong khoảng thời gian nửa mở [0.0, 1.0).

Các bài viết khác:

Thí dụ:

import numpy as np  
a=np.random.sample()  
a  
b=type(np.random.sample())  
b  
c=np.random.sample((5,))  
c  

Output:

  1. np.random.choice (a [, size, Replace, p])

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo mẫu ngẫu nhiên từ một mảng 1-D nhất định.

Thí dụ:

import numpy as np  
a=np.random.choice(5,3)  
a  
b=np.random.choice(5,3, p=[0.2, 0.1, 0.4, 0.2, 0.1])  
b  

Output:

  1. np.random.bytes (length)

Chức năng này của mô-đun ngẫu nhiên được sử dụng để tạo ra các byte ngẫu nhiên.

Thí dụ:

import numpy as np  
a=np.random.bytes(7)  
a  

Output:

Hoán vị

Có các chức năng sau của hoán vị:

  1. np.random.shuffle ()

Hàm này được sử dụng để sửa đổi một trình tự tại chỗ bằng cách xáo trộn nội dung của nó.

Thí dụ:

import numpy as np  
a=np.arange(12)  
a  
np.random.shuffle(a)  
a  

Output:

  1. np.random.permutation ()

Hàm này hoán vị một dãy ngẫu nhiên hoặc trả về một dãy đã hoán vị.

Thí dụ:

import numpy as np  
a=np.random.permutation(12)  
a  

Output:

Phân phối

Có các chức năng sau của hoán vị:

  1. beta (a, b [, size])

Hàm này được sử dụng để vẽ mẫu từ bản phân phối Beta.

Thí dụ:

def setup(self):  
        self.dist = dist.beta  
        self.cargs = []  
        self.ckwd = dict(alpha=2, beta=3)  
        self.np_rand_fxn = numpy.random.beta  
        self.np_args = [2, 3]  
        self.np_kwds = dict() 
  1. binomial (n, p [, size])

Hàm này được sử dụng để lấy mẫu từ một phân phối nhị thức.

Thí dụ:

import numpy as np  
n, p = 10, .6  
s1= np.random.binomial(n, p, 10)  
s1  

Output:

  1. chisquare (df [, size])

Hàm này được sử dụng để lấy mẫu từ một phân phối nhị thức.

Thí dụ:

import numpy as np  
np.random.chisquare(2,4)  
sum(np.random.binomial(9, 0.1, 20000) == 0)/20000.  

Output:

  1. dirichlet (alpha [, size])

Hàm này được sử dụng để vẽ một mẫu từ phân phối Dirichlet.

Thí dụ:

Import numpy as np  
import matplotlib.pyplot as plt  
s1 = np.random.dirichlet((10, 5, 3), 20).transpose()  
plt.barh(range(20), s1[0])  
plt.barh(range(20), s1[1], left=s1[0], color='g')  
plt.barh(range(20), s1[2], left=s1[0]+s1[1], color='r')  
plt.title("Lengths of Strings")  
plt.show()  

Output:

  1. exponential([scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối hàm mũ.

Thí dụ:

def __init__(self, sourceid, targetid):  
        self.__type = 'Transaction'  
        self.id = uuid4()  
        self.source = sourceid  
        self.target = targetid  
        self.date = self._datetime.date(start=2015, end=2019)  
        self.time = self._datetime.time()  
  
        if random() < 0.05:  
            self.amount = self._numbers.between(100000, 1000000)  
        self.amount = npr.exponential(10)  
  
        if random() < 0.15:  
            self.currency = self._business.currency_iso_code()  
        else:  
            self.currency = None  
  1. f (dfnum, dfden [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối F.

Thí dụ:

import numpy as np  
dfno= 1.  
dfden = 48.  
s1 = np.random.f(dfno, dfden, 10)  
np.sort(s1)  

Output:

  1.  gamma(shape[, scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Gamma

Thí dụ:

import numpy as np  
shape, scale = 2., 2.  
s1 = np.random.gamma(shape, scale, 1000)  
import matplotlib.pyplot as plt  
import scipy.special as spss  
count, bins, ignored = plt.hist(s1, 50, density=True)  
a = bins**(shape-1)*(np.exp(-bins/scale) /  
(spss.gamma(shape)*scale**shape))  
plt.plot(bins, a, linewidth=2, color='r')  
plt.show()  

  1. geometric(p[, size])

Hàm này được sử dụng để lấy mẫu từ một phân bố hình học.

Thí dụ:

import numpy as np  
a = np.random.geometric(p=0.35, size=10000)  
(a == 1).sum() / 1000  

Output:

  1. gumbel ([loc, scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Gumble.

Thí dụ:

import numpy as np  
lov, scale = 0, 0.2  
s1 = np.random.gumbel(loc, scale, 1000)  
import matplotlib.pyplot as plt  
count, bins, ignored = plt.hist(s1, 30, density=True)  
plt.plot(bins, (1/beta)*np.exp(-(bins - loc)/beta)* np.exp( -np.exp( -(bins - loc) /beta) ),linewidth=2, color='r')  
plt.show()  

Output:

  1. hypergeometric (ngood, nbad, nsample [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Hypergeometric.

Thí dụ:

import numpy as np  
good, bad, samp = 100, 2, 10  
s1 = np.random.hypergeometric(good, bad, samp, 1000)  
plt.hist(s1)  
plt.show()  

Output:

  1. laplace ([loc, scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Laplace hoặc phân phối hàm mũ kép với vị trí và tỷ lệ xác định.

Thí dụ:

import numpy as np  
location, scale = 0., 2.  
s = np.random.laplace(location, scale, 10)  
s  

Output:

  1. logistic([loc, scale, size])

Chức năng này được sử dụng để lấy mẫu từ phân phối logistic.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
location, scale = 10, 1  
s1 = np.random.logistic(location, scale, 10000)  
count, bins, ignored = plt.hist(s1, bins=50)  
count  
bins  
ignored  
plt.show()  

Output:

  1.  lognormal([mean, sigma, size])

Hàm này được sử dụng để lấy mẫu từ phân phối log-chuẩn.

Thí dụ:

import numpy as np  
mu, sigma = 2., 1.  
s1 = np.random.lognormal(mu, sigma, 1000)  
import matplotlib.pyplot as plt  
count, bins, ignored = plt.hist(s1, 100, density=True, align='mid')  
a = np.linspace(min(bins), max(bins), 10000)  
pdf = (np.exp(-(np.log(a) - mu)**2 / (2 * sigma**2))/ (a * sigma * np.sqrt(2 * np.pi)))  
plt.plot(a, pdf, linewidth=2, color='r')  
plt.axis('tight')  
plt.show()  

Output:

14) logseries (p [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối logarit.

Thí dụ:

import numpy as np  
x = .6  
s1 = np.random.logseries(x, 10000)  
count, bins, ignored = plt.hist(s1)  
def logseries(k, p):  
return -p**k/(k*log(1-p))  
plt.plot(bins, logseries(bins, x)*count.max()/logseries(bins, a).max(), 'r')  
plt.show() 

Output:

  1. multinomial(n, pvals[, size])

Hàm này được sử dụng để lấy mẫu từ một phân phối đa thức.

Thí dụ:

import numpy as np  
np.random.multinomial(20, [1/6.]*6, size=1)  

Output:

  1. multivariate_normal(mean, cov[, size, …)

Hàm này được sử dụng để lấy mẫu từ phân phối chuẩn đa biến.

Thí dụ:

import numpy as np  
mean = (1, 2)  
coveriance = [[1, 0], [0, 100]]   
import matplotlib.pyplot as plt  
a, b = np.random.multivariate_normal(mean, coveriance, 5000).T  
plt.plot(a, b, 'x')  
plt.axis('equal'023  
030  
)  
plt.show()  

Output:

  1. negative_binomial (n, p [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối nhị thức âm.

Thí dụ:

import numpy as np  
s1 = np.random.negative_binomial(1, 0.1, 100000)  
for i in range(1, 11):  
probability = sum(s1<i) / 100000.  
print i, "wells drilled, probability of one success =", probability  

Output:

  1. noncentral_chisquare (df, nonc [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối chi bình phương không trung tâm.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
val = plt.hist(np.random.noncentral_chisquare(3, 25, 100000), bins=200, normed=True)  
plt.show()  

Output:

  1. normal([loc, scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối chuẩn.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
mu, sigma = 0, 0.2 # mean and standard deviation  
s1 = np.random.normal(mu, sigma, 1000)  
abs(mu - np.mean(s1)) < 0.01  
abs(sigma - np.std(s1, ddof=1)) < 0.01  
count, bins, ignored = plt.hist(s1, 30, density=True)  
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ), linewidth=2, color='r')  
plt.show()  

Output:

  1. pareto (a [, size])

Chức năng này được sử dụng để vẽ các mẫu từ Lomax hoặc Pareto II với hình dạng được chỉ định.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
b, m1 = 3., 2.  # shape and mode  
s1 = (np.random.pareto(b, 1000) + 1) * m1  
count, bins, _ = plt.hist(s1, 100, density=True)  
fit = b*m**b / bins**(b+1)  
plt.plot(bins, max(count)*fit/max(fit), linewidth=2, color='r')  
plt.show()  

Output:

  1. power (a [, size])

Hàm này được sử dụng để vẽ các mẫu trong [0, 1] từ phân phối lũy thừa với số mũ dương a-1.

Thí dụ:

import numpy as np  
x = 5. # shape  
samples = 1000  
s1 = np.random.power(x, samples)  
import matplotlib.pyplot as plt  
count, bins, ignored = plt.hist(s1, bins=30)  
a = np.linspace(0, 1, 100)  
b = x*a**(x-1.)  
density_b = samples*np.diff(bins)[0]*b  
plt.plot(a, density_b)  
plt.show()  

Output:

  1. rayleigh([scale, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Rayleigh.

Thí dụ:

val = hist(np.random.rayleigh(3, 100000), bins=200, density=True)  
meanval = 1  
modeval = np.sqrt(2 / np.pi) * meanval  
s1 = np.random.rayleigh(modeval, 1000000)  
100.*sum(s1>3)/1000000.  

Output:

  1. standard_cauchy ([size])

Hàm này được sử dụng để lấy mẫu từ phân phối Cauchy tiêu chuẩn với mode = 0.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
s1 = np.random.standard_cauchy(1000000)  
s1 = s1[(s1>-25) & (s1<25)]  # truncate distribution so it plots well  
plt.hist(s1, bins=100)  
plt.show()  

Output:

  1. standard_exponential ([size])

Hàm này được sử dụng để lấy mẫu từ phân phối mũ tiêu chuẩn.

Thí dụ:

import numpy as np  
n = np.random.standard_exponential((2, 7000))  

Output:

  1. standard_gamma ([size])

Hàm này được sử dụng để lấy mẫu từ phân phối Gamma chuẩn.

Thí dụ:

import numpy as np  
shape, scale = 2., 1.  
s1 = np.random.standard_gamma(shape, 1000000)  
import matplotlib.pyplot as plt  
import scipy.special as sps  
count1, bins1, ignored1 = plt.hist(s, 50, density=True)  
y = bins1**(shape-1) * ((np.exp(-bins1/scale))/ (sps.gamma(shape) * scale**shape))  
plt.plot(bins1, y, linewidth=2, color='r')  
plt.show()  

Output:

  1. standard_normal ([size])

Hàm này được sử dụng để lấy mẫu từ một phân phối Chuẩn chuẩn.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
s1= np.random.standard_normal(8000)  
s1  
q = np.random.standard_normal(size=(3, 4, 2))  
q   

Đầu ra:

  1. standard_t (df [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Student chuẩn với bậc tự do df.

Thí dụ:

intake = np.array([5260., 5470, 5640, 6180, 6390, 6515, 6805, 7515,8230,8770])  
s1 = np.random.standard_t(10, size=100000)  
np.mean(intake)  
intake.std(ddof=1)  
t = (np.mean(intake)-7725)/(intake.std(ddof=1)/np.sqrt(len(intake)))  
h = plt.hist(s1, bins=100, density=True)  
np.sum(s1<t) / float(len(s1))  
plt.show()  

Output:

  1. triangular(left, mode, right[, size])

Hàm này được sử dụng để lấy mẫu từ một phân bố tam giác trong khoảng thời gian.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
h = plt.hist(np.random.triangular(-4, 0, 8, 1000000), bins=300,density=True)  
plt.show()  

Output:

  1. uniform([low, high, size])

Chức năng này được sử dụng để lấy mẫu từ một phân phối đồng đều.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
s1 = np.random.uniform(-1,0,1000)  
np.all(s1 >= -1)  
np.all(s1 < 0)  
count, bins, ignored = plt.hist(s1, 15, density=True)  
plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')  
plt.show()  

Output:

  1. vonmises (m1, m2 [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối von Mises.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
m1, m2 = 0.0, 4.0  
s1 = np.random.vonmises(m1, m2, 1000)  
from scipy.special import i0  
plt.hist(s1, 50, density=True)  
x = np.linspace(-np.pi, np.pi, num=51)  
y = np.exp(m2*np.cos(x-m1))/(2*np.pi*i0(m2))  
plt.plot(x, y, linewidth=2, color='r')  
plt.show()  

Output:

  1. wald(mean, scale[, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Wald, hoặc nghịch đảo Gaussian.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
h = plt.hist(np.random.wald(3, 3, 100000), bins=250, density=True)  
plt.show()  

Output:

  1. weibull (a [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Weibull.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
from scipy import special  
x=2.0  
s=np.random.weibull(x, 1000)  
a = np.arange(1, 100.)/50.  
def weib(x, n, a):  
return (a/n)*(x/n)**np.exp(-(x/n)**a)  
count, bins, ignored = plt.hist(np.random.weibull(5.,1000))  
a= np.arange(1,100.)/50.  
scale = count.max()/weib(x, 1., 5.).max()  
scale = count.max()/weib(a, 1., 5.).max()  
plt.plot(x, weib(x, 1., 5.)*scale)  
plt.show()  

Output:

  1. zipf (a [, size])

Hàm này được sử dụng để lấy mẫu từ phân phối Zipf.

Thí dụ:

import numpy as np  
import matplotlib.pyplot as plt  
from scipy import special  
x=2.0  
s=np.random.zipf(x, 1000)  
count, bins, ignored = plt.hist(s[s<50], 50, density=True)  
a = np.arange(1., 50.)  
b= a**(-x) / special.zetac(x)  
plt.plot(a, b/max(b), linewidth=2, color='r')  
plt.show() 

Output: