Tôi muốn tạo các mảng tương quan giữa các tọa độ x và y, để kiểm tra các phương pháp vẽ sơ đồ matplotlib khác nhau, nhưng tôi thất bại ở đâu đó, vì tôi không thể nhận được numpy.random.multivariate_normal
cho tôi những mẫu tôi muốn. Lý tưởng nhất, tôi muốn giá trị x của tôi giữa -0,51, và 51,2, và giá trị y của tôi giữa 0,33 và 51,6 (mặc dù tôi cho rằng phạm vi bằng nhau sẽ là OK, vì tôi có thể hạn chế cốt truyện sau đó), nhưng tôi không chắc chắn ý nghĩa (0, 0?) Và các giá trị hiệp phương sai tôi nên sử dụng để lấy các mẫu này từ hàm.Tạo các điểm x và y tương ứng ngẫu nhiên bằng cách sử dụng Numpy
11
A
Trả lời
20
Như tên ngụ ý numpy.random.multivariate_normal
tạo ra các bản phân phối bình thường, điều này có nghĩa là có xác suất không xác định các điểm tìm kiếm bên ngoài bất kỳ khoảng thời gian nhất định nào. Bạn có thể tạo ra các bản phân phối đồng nhất có liên quan nhưng điều này phức tạp hơn một chút. Hãy xem here cho hai phương pháp có thể.
Nếu bạn muốn đi với phân phối bình thường, bạn có thể thiết lập sigmas sao cho nửa chu kỳ của bạn tương ứng với 3 độ lệch chuẩn (bạn cũng có thể lọc ra các điểm xấu nếu cần). Bằng cách này bạn sẽ có ~ 99% số điểm của bạn trong khoảng thời gian của bạn, ví dụ:
import numpy as np
from matplotlib.pyplot import scatter
xx = np.array([-0.51, 51.2])
yy = np.array([0.33, 51.6])
means = [xx.mean(), yy.mean()]
stds = [xx.std()/3, yy.std()/3]
corr = 0.8 # correlation
covs = [[stds[0]**2 , stds[0]*stds[1]*corr],
[stds[0]*stds[1]*corr, stds[1]**2]]
m = np.random.multivariate_normal(means, covs, 1000).T
scatter(m[0], m[1])