Python resize()重新调整大小而不是调整大小?
我正在尝试调整numpy数组的大小,但是调整大小的方法似乎是先将数组展平,然后获取第一个X*Y元素,并将它们放在新的形状中。我想做的是在坐标3,3处剪切数组,而不是重新排列它。当我试着把它放大到7,7时也会发生类似的事情。。。我希望用零填充新的列和行,并保持数据的原样,而不是“重新排列”。 有办法吗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.],
> 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
,但不再是相同的数组。我怀疑会是这样的。。您是对的,它可能将数组存储在相邻的空间中