首页 > 解决方案 > 如何用极低密度的零填充零矩阵

问题描述

我有一个大小为零的 3D 矩阵(850,850,850),我想以均匀的方式在这个矩阵中插入一个极低密度 = 8*10^-7 的矩阵。我尝试使用 random.sparse (它适用于更高的密度)但它不起作用,我认为密度太低并且接近于零,实际上没有应该有 50 个的。这是更好理解的代码:

import numpy as np
import random

space=np.zeros(shape=(850,850,850))
den=50/(850*850*850)
for k in range (0,850): 
   rdm_space=sparse.random(850, 850, density=den, data_rvs=np.ones)
   rdm_space=rdm_space.toarray()                                                                 
   space[:][:][k] = vac_space

有人有什么建议吗?谢谢

标签: pythonnumpyrandom

解决方案


如果最终使用 NumPy 数组,不确定为什么需要稀疏采样

只需采样索引并将值设置为 1

顺势而为

import numpy as np

N = 850*850*850
o = 50
space=np.zeros(N, dtype=np.int32)

idx = np.random.choice(N, size=o, replace=False) # sampled indices

space[idx]=1 # set values at idx to one

# quick check
q = space[space>0]
print(len(q))

# make final properly shaped array
np.reshape(space, newshape=(850,850,850))

推荐阅读