Могу ли я оптимизировать генератор случайных чисел, используя numpy? - PullRequest
1 голос
/ 29 апреля 2020

этот код np.random.rand(1000, 2) в основном дает один большой кластер чисел

enter image description here

Но есть ли способ получить те случайные числа, сгенерированные между 4 интервалами, так что я могу получить что-то вроде 4 группы чисел вместо?

enter image description here

Обратите внимание, что для меня важен формат вывода (список списков)

Пример вывода:

np.random.rand(4, 2)

 [[0.20481852 0.39206741]
  [0.76406832 0.81779067]
  [0.94912136 0.9966882 ]
  [0.07224877 0.95471273]]

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете использовать make_blobs Склеарна, который случайным образом генерирует изотропные c Гауссовы капли. Для большего контроля над центрами и ковариациями вы можете посмотреть в multivariate_normal:

from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=4, centers=4, n_features=2,
                   cluster_std=0.3, random_state=0)

print(X)
array([[2.19931109, 2.35193717],
       [1.95204867, 1.30826216],
       [1.9263585 , 4.15243012],
       [2.84382807, 3.32650945]])

Например, на большее количество случайных чисел. образцы:

plt.figure(figsize=(7,7))
X, y = make_blobs(n_samples=400, centers=4, n_features=2,
                   cluster_std=0.3, random_state=0)
plt.scatter(X[:, 0], X[:, 1])
plt.show()

enter image description here

0 голосов
/ 29 апреля 2020

Пример рисунка представляет собой сумму двух двумерных случайных величин, которые мы можем назвать corners и 2D uniform clusters. Вы можете построить их, используя numpy примитивы, подобные этому.

import numpy as np

# corner locations of 2-D uniform clusters
corners = np.random.rand(4, 2)

# scale of square 2-D uniform variates
scale = 0.3
square_rand = scale * np.random.rand(500, 2)

# select random corners for each item and add 
corner_ix = np.random.choice(4, 500)
four_clust = corners[corner_ix] + square_rand

Обратите внимание на коэффициент scale, чтобы уменьшить форму единичного квадрата до 0,3 (измеряется глазным яблоком на графике рассеяния).

four clusters

Версия 2, которая подходит к изображению ближе к вашему QPSK-подобному графику рассеяния:

import numpy as np
import matplotlib.pyplot as plt

# scale of square 2-D uniform variates
scale = 0.3

# corner locations of 2-D uniform clusters
centers = np.array([[0.2, 0.2], [0.2, 0.8], [0.8, 0.2], [0.8, 0.8]])
corners = centers - scale/2

square_rand = scale * np.random.rand(500, 2)

# select random corners for each item and add 
corner_ix = np.random.choice(4, 500)
four_clust = corners[corner_ix] + square_rand

plt.plot(four_clust[:,0], four_clust[:,1], 'x')
plt.show()

fixed corners, unif variates

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...