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

2024-09-28 21:49:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试调整numpy数组的大小,但似乎调整大小的方法是先将数组展平,然后获取第一个X*Y元素并将它们放入新的形状中。我想做的是在坐标3,3处剪切数组,而不是重新排列它。当我试着把它放大到7,7。。。与“重新排列”不同,我希望用零填充新的列和行,并保持数据不变。 有办法吗?在

> 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.]])

谢谢你。。。在


Tags: 方法numpyfalse元素npzerosrange数组
2条回答

我相信您希望使用numpy的切片语法,而不是resizeresize首先遍历数组并使用1D视图。在

>>> 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]])

你在这里所做的是观察纽比阵列。例如,要通过切片更新原始阵列:

^{pr2}$

关于numpy切片语法的一个很好的指南可以在here找到。在

升迁(或padding)只能通过复制数据来实现。从一个零数组开始并适当地填充

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

升级到7x7是这样的

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

相关问题 更多 >