【问题标题】:numpy pad with zeros creates 2d array instead of desired 1d带零的 numpy pad 创建 2d 数组而不是所需的 1d
【发布时间】:2019-10-18 04:52:09
【问题描述】:

我正在尝试用零填充一维 numpy 数组。

这是我的代码

v = np.random.rand(100, 1)
pad_size = 100
v = np.pad(v, (pad_size, 0), 'constant')

结果是 200x101 数组,其最后一列是 [0,0,0,...<v>],(前导 100 个零), 并且所有 1st 100 列都是零。

如何得到我想要的数组

[0,0,0,..0,<v>]

大小为 (len(v)+pad_size, 1)?

【问题讨论】:

    标签: python arrays numpy padding


    【解决方案1】:

    pad 输出是二维的,因为 pad 输入 是二维的。出于某种原因,您使用rand 创建了一个二维数组:

    v = np.random.rand(100, 1)
    

    如果你想要一个一维数组,你应该创建一个一维数组:

    v = np.random.rand(100)
    

    如果您想要一个 1 列的 2D 数组,那么您使用 pad 不正确。第二个参数应该是((100, 0), (0, 0)):在第一轴之前填充100个元素,在第一轴之后填充0个元素,在第二轴之前填充0个元素,在第二轴之后填充0个元素:

    v = np.random.rand(100, 1)
    pad_size = 100
    v = np.pad(v, ((pad_size, 0), (0, 0)), 'constant')
    

    对于 1 行二维数组,您需要同时调整 rand 调用和 pad 调用:

    v = np.random.rand(1, 100)
    pad_size = 100
    v = np.pad(v, ((0, 0), (pad_size, 0)), 'constant')
    

    【讨论】:

    • 谢谢!不过,我将如何获得我想要的形状 (200,1) 的结果?
    • @Gulzar:你想要一维数组吗?您似乎对一维数组和一维二维数组之间的区别没有清楚的了解 - 您说您想要一个一维数组,并且您尝试使用它,就好像没有长度一维一样,但后来你说你想要一个 2D 形状。你应该先弄清楚这一点。
    • 你是对的。我没有意识到区别。我真正想要的是单行二维数组。
    • 实际上,(200, 1) 将是一个 1-column 二维数组。我将为 1 行和 1 列添加代码。
    • 答案展开。
    【解决方案2】:
    1. np.hstack((np.zeros((200, 100)), 你的 v))

    2. np.concatenate((np.zeros((200, 100)), 你的 v), axis=1)

      可能是你的愿望:

    【讨论】:

    • 我认为您陈述了不同的方法来获得我不想要的结果。如何得到我想要的结果?
    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2023-03-14
    • 2021-08-15
    • 2021-01-28
    • 2017-06-18
    相关资源
    最近更新 更多