我想找到一个重塑函数,它能够将不同维数的数组转换为相同维数的数组。让我来解释一下:
import numpy as np
a = np.array([[[1,2,3,3],[1,2,3,3]],[[1,2,3,3],[1,2,3,3]]])
b = np.array([[[1,2,3,3],[1,2,3,3]],[[1,2,3,3],[1,2,3,3]],[[1,2,3,3],[1,2,3,4]]])
c = np.array([[[1,2,3,3],[1,2,3,3]]])我希望能够使b,c形状等于a形状。但是,np.reshape会抛出一个错误,因为正如这里所解释的(Numpy resize or Numpy reshape),该函数被显式地用于处理相同的维度。
我想要该函数的一些版本,如果形状较小,则在第一个维度的开始处添加零,如果形状较大,则删除开始。我的示例将如下所示:
b = np.array([[[1,2,3,3],[1,2,3,3]],[[1,2,3,3],[1,2,3,4]]])
c = np.array([[[0,0,0,0],[0,0,0,0]],[[1,2,3,3],[1,2,3,3]]])我是否需要编写自己的函数来实现这一点?
发布于 2019-09-27 23:43:25
这与上面的解决方案类似,但如果较低的维度不匹配,也会起作用
def custom_reshape(a, b):
result = np.zeros_like(a).ravel()
result[-min(a.size, b.size):] = b.ravel()[-min(a.size, b.size):]
return result.reshape(a.shape)
custom_reshape(a,b)发布于 2019-09-27 22:52:43
我会像这样写一个函数:
def align(a,b):
out = np.zeros_like(a)
x = min(a.shape[0], b.shape[0])
out[-x:] = b[-x:]
return out输出:
align(a,b)
# array([[[1, 2, 3, 3],
# [1, 2, 3, 3]],
# [[1, 2, 3, 3],
# [1, 2, 3, 4]]])
align(a,c)
# array([[[0, 0, 0, 0],
# [0, 0, 0, 0]],
# [[1, 2, 3, 3],
# [1, 2, 3, 3]]])https://stackoverflow.com/questions/58136674
复制相似问题