scipy - 如何将零数组插入另一个具有不同维度的数组中

时间:2011-11-08 16:02:20

标签: python scipy

如果我有一个数组:

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),但它仍然不起作用。

1 个答案:

答案 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

如果你真的只想将这些元素设置为单个而不是使用另一个数组中的元素。