如果我有一个数组:
myzeros=scipy.zeros((c*pos,c*pos)) , c=0.1 , pos=100
和一个数组:
grid=scipy.ones((pos,pos))
如何在随机位置将零插入网格?问题在于尺寸。
我知道在1d你可以做到:
myzeros=sc.zeros(c*pos) # array full of (zeros)
grid=sc.ones(pos) # grid full of available positions(ones)
dist=sc.random.permutation(pos)[:c*pos] # distribute c*pos zeros in random
# positions
grid[dist]=myzeros
我尝试了类似的东西,但它不起作用。我也尝试过:myzeros=sc.zeros(c*pos)
,但它仍然不起作用。
答案 0 :(得分:3)
有几种方法,但最简单的似乎是首先将2D网格转换为1D网格,然后按照1D情况继续,然后转换回2D:
c = 0.1
pos = 100
myzeros=scipy.zeros((c*pos,c*pos))
myzeros1D = myzeros.ravel()
grid=scipy.ones((pos,pos))
grid1D = grid.ravel()
dist=sc.random.permutation(pos*pos)[:c*pos*c*pos]
grid1D[dist]=myzeros1D
myzeros = myzeros1D.reshape((c*pos,c*pos))
grid = grid1D.reshape((pos, pos))
编辑:回答您的评论:如果您只想让部分myzeros进入网格数组,则必须使dist数组更小。示例:
dist = scipy.random.permutation(pos*pos)[:c*pos]
grid1D[dist] = myzeros1D[:c*pos]
我希望你知道,这最后一行可以写成
grid1D[dist] = 0
如果你真的只想将这些元素设置为单个而不是使用另一个数组中的元素。