numpy.resize()重新排列而不是调整大小?

时间:2014-04-17 19:37:34

标签: python arrays numpy resize

我正在尝试调整numpy数组的大小,但似乎调整大小的方法是首先展平数组,然后获得第一个X * Y elem并将它们放入新形状。我想要做的是在coord 3,3处切割阵列,而不是重新排列它。类似的事情发生在我尝试升级它说7,7 ...而不是“重新排列”我想用零填充新的cols和行并保持数据不变。 有没有办法做到这一点?

> a = np.zeros((5,5))
> a.flat = range(25)
> a
array(
  [[  0.,   1.,   2.,   3.,   4.],
   [  5.,   6.,   7.,   8.,   9.],
   [ 10.,  11.,  12.,  13.,  14.],
   [ 15.,  16.,  17.,  18.,  19.],
   [ 20.,  21.,  22.,  23.,  24.]])

> a.resize((3,3),refcheck=False)
> a
array(
  [[ 0.,  1.,  2.],
   [ 3.,  4.,  5.],
   [ 6.,  7.,  8.]])
谢谢......

2 个答案:

答案 0 :(得分:4)

升级到7x7会像这样

upsized = np.zeros([7, 7]) 
upsized[:5, :5] = a

答案 1 :(得分:3)

我相信你想使用numpy的切片语法而不是resizeresize首先调整数组并使用一维视图。

>>> a = np.arange(25).reshape(5,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> a[:3,:3]
array([[ 0,  1,  2],
       [ 5,  6,  7],
       [10, 11, 12]])

你在这里做的是观察numpy数组。例如,通过切片来更新原始数组:

>>> a[:3,:3] = 0
>>> a
array([[ 0,  0,  0,  3,  4],
       [ 0,  0,  0,  8,  9],
       [ 0,  0,  0, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

可以找到关于numpy切片语法的优秀指南here

升迁(或填充)仅适用于复制数据。你从一个零数组开始并适当填写

upsized = np.zeros([7, 7])
upsized[:5, :5] = a