如何扩展numpy数组(实现步长切片的逆操作)?
从步长切片后的NumPy数组还原原数组
假设我们有切片得到的数组b,想要还原出原数组a(其中原数组非切片位置填充0),可以用以下几种简洁的方法:
方法一:初始化数组后切片赋值
这是最直观且符合切片逆操作逻辑的方法:
import numpy as np # 已知切片后的数组b b = np.array([[1, 2], [3, 4]]) # 初始化与原数组a同形状的数组,填充指定值(这里是0) a = np.zeros((3, 3), dtype=b.dtype) # 通过切片将b的值放回对应位置 a[::2, ::2] = b
执行后a会还原为:
array([[1, 0, 2], [0, 0, 0], [3, 0, 4]])
方法二:利用索引赋值
如果需要更灵活的索引控制,可以先获取原数组中需要填充的位置索引,再赋值:
import numpy as np b = np.array([[1, 2], [3, 4]]) # 获取原数组中对应切片位置的扁平索引 flat_indices = np.arange(9).reshape(3, 3)[::2, ::2].flatten() # 初始化扁平数组并赋值 a_flat = np.zeros(9, dtype=b.dtype) a_flat[flat_indices] = b.flatten() # 重塑为原形状 a = a_flat.reshape(3, 3)
注意事项
- 只有当原数组非切片位置的填充值已知(如示例中的0)时,才能完成还原——因为切片操作会丢弃非切片位置的原始数据,仅保留切片位置的值。
- 如果原数组的切片规则更复杂(比如起始索引不是0、步长不是2),只需对应调整赋值时的切片参数即可。
内容的提问来源于stack exchange,提问作者trivicious
相关产品推荐
相关产品推荐

