制作一个具有特定概率的稀疏矩阵(Python)

Make a sparse matrix with specific probability(Python)

我想做一个稀疏矩阵。 矩阵有 0、1 和 -1 作为元素,我想使条件为 1 的 25%、-1 的 25% 和 0 的 50% 在整个矩阵中。 我想将 pure-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         

您可以使用 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)

这可以很容易地转换成 sparse。然而,当稀疏度约为 0.5 时,某些表示可能比密集表示提供的 none 优势很小。

考虑将变量 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