Сделать разреженную матрицу с определенной вероятностью (Python) - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу сделать разреженную матрицу. Матрица имеет 0, 1 и -1 в качестве элементов, и я хочу сделать условие, чтобы 25% из 1, 25% из -1 и 50% из 0 находились во всей матрице. Я хочу выразить код, реализованный на чистом python, как SciPy или Tensorflow.

for n in range(LWE_N):
    for l in range(LWE_L):
        tmp_S=random.getrandbits(2)
        if tmp_S==1: sk_S[n][l]=1    
        elif tmp_S==0: sk_S[n][l]=-1 
        else: sk_S[n][l]=0         

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Рассмотрите возможность переименования ваших переменных LWE_N и LWE_L в строчные эквиваленты, если они не являются глобальными константами. Вы можете получить случайную матрицу, заполненную указанными целыми числами со следующим:

import numpy as np
LWE_N = 10
LWE_L = 5
flat_m = np.random.choice((0, -1, 1,), p=(0.5, 0.25, 0.25), size=LWE_N * LWE_L)
m = flat_m.reshape((LWE_N, LWE_L))

См .: https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html

0 голосов
/ 06 сентября 2018

Вы можете легко создать не разреженную матрицу, которая удовлетворяет требованию, используя numpy :

import numpy as np

n, m = 10, 10
X = np.random.rand(n, m) - 0.5
X = np.sign(X) * (np.abs(X) > 0.25)

Это может быть легко преобразовано в разреженный . Тем не менее, когда разреженность составляет около 0,5, некоторые из представлений могут дать мало или вовсе преимущество перед плотным представлением.

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