Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python resize()重新调整大小而不是调整大小?_Python_Arrays_Numpy_Resize - Fatal编程技术网

Python resize()重新调整大小而不是调整大小?

Python resize()重新调整大小而不是调整大小?,python,arrays,numpy,resize,Python,Arrays,Numpy,Resize,我正在尝试调整numpy数组的大小,但是调整大小的方法似乎是先将数组展平,然后获取第一个X*Y元素,并将它们放在新的形状中。我想做的是在坐标3,3处剪切数组,而不是重新排列它。当我试着把它放大到7,7时也会发生类似的事情。。。我希望用零填充新的列和行,并保持数据的原样,而不是“重新排列”。 有办法吗 > a = np.zeros((5,5)) > a.flat = range(25) > a array( [[ 0., 1., 2., 3., 4.],

我正在尝试调整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.]])

谢谢…

我相信您希望使用numpy的切片语法,而不是
调整大小
<代码>调整大小的工作原理是首先对阵列进行散开,然后使用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]])
您在这里所做的是查看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切片语法的优秀指南

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

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

升级到7x7的过程如下

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

你能发布一个预期输出的例子吗?你可能想在回答中添加升迁部分来完成it@eickenberg你似乎理解了问题的这一部分,加上我们可能已经准确地猜到了提问者想要什么。谢谢,这就是我需要的。。您不知道如何在适当的位置执行此操作,是吗?如果您的原始数据
a
是按您的方式创建的,则无法在适当的位置执行此操作。这是因为
np.ndarray
数据在内存中始终必须是连续的,并且您不知道是否有足够的空间将额外的24个插槽添加到a已经占用的25个插槽中,以便为内存中的49=7x7连续数字腾出空间。但是,如果您在内存中预先分配了49个空间,则可以进行就地编辑。例如,
b=upsized[:5,:5]
是一个与upsized相同的数据视图(无副本!),其内容等于
a
,但不再是相同的数组。我怀疑会是这样的。。您是对的,它可能将数组存储在相邻的空间中