首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy reshape -自动填充或移除

Numpy reshape -自动填充或移除
EN

Stack Overflow用户
提问于 2019-09-27 22:36:37
回答 2查看 537关注 0票数 1

我想找到一个重塑函数,它能够将不同维数的数组转换为相同维数的数组。让我来解释一下:

代码语言:javascript
复制
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),该函数被显式地用于处理相同的维度。

我想要该函数的一些版本,如果形状较小,则在第一个维度的开始处添加零,如果形状较大,则删除开始。我的示例将如下所示:

代码语言:javascript
复制
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]]])

我是否需要编写自己的函数来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-27 23:43:25

这与上面的解决方案类似,但如果较低的维度不匹配,也会起作用

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-09-27 22:52:43

我会像这样写一个函数:

代码语言:javascript
复制
def align(a,b):
    out = np.zeros_like(a)
    x = min(a.shape[0], b.shape[0])
    out[-x:] = b[-x:]

    return out

输出:

代码语言:javascript
复制
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]]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58136674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档