在Python中创建用户/项目排名稀疏数组

在Python中创建用户/项目排名稀疏数组,python,numpy,Python,Numpy,我必须在[0,5]中生成填充随机值的稀疏数组,其中0是缺失值。值的概率必须沿数组变化。我想这样做: a1 = np.random.choice(range(0,6),10,p=[0.3,0,0,0,0.3,0.4]) a2 = np.random.choice(range(0,6),10,p=[0.9,0.05,0.025,0.025,0,0]) a3 = np.random.choice(range(0,6),10,p=[0.95,0.05,0,0,0,0]) np.hstack([a1,a2

我必须在[0,5]中生成填充随机值的稀疏数组,其中0是缺失值。值的概率必须沿数组变化。我想这样做:

a1 = np.random.choice(range(0,6),10,p=[0.3,0,0,0,0.3,0.4])
a2 = np.random.choice(range(0,6),10,p=[0.9,0.05,0.025,0.025,0,0])
a3 = np.random.choice(range(0,6),10,p=[0.95,0.05,0,0,0,0])
np.hstack([a1,a2,a3])

>>> array([4, 4, 5, 5, 0, 4, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 1, 0, 0, 0, 0, 0])

有一种更干净、更统一的方法可以做到这一点?

您可以这样做:

np.hstack([(np.random.choice(range(0,6),10,p=[0.3,0,0,0,0.3,0.4])), (np.random.choice(range(0,6),10,p=[0.9,0.05,0.025,0.025,0,0])),(np.random.choice(range(0,6),10,p=[0.95,0.05,0,0,0,0]))])

它实际上并没有改变任何东西,但它确实看起来更干净,不会弄乱名称空间。

在这种情况下,
更团结
意味着什么?@cel很难表达出来。这意味着使用来自任何概率分布的矩母函数(mgf)来填充数组本身(使用单个函数)。这不一样吗,但所有都在一行中?我看不出有什么改进。真的有什么方法可以改进吗?每次调用
np.random.choice
,他都会使用不同的参数,因此无论如何都必须多次调用它,那么还有什么可以改进的呢?