【问题标题】:How to reshape only last dimensions in numpy?如何仅重塑numpy中的最后一个维度?
【发布时间】:2018-02-21 08:44:00
【问题描述】:

假设我有 A 形状 (...,96) 并希望将其重塑为 (...,32,3) 保持长度和前面尺寸的数量(如果有的话)不变。

如何做到这一点?

如果我写

np.reshape(A, (-1, 32, 2))

它将所有前面的维度扁平化为一个,这是我不想要的。

【问题讨论】:

  • -1 的使用不是省略号。它是“计算保持相同整体尺寸的一个(明确)维度”的简写。
  • 发布的解决方案对您有用吗?
  • @Divakar 绝对,谢谢

标签: python numpy multidimensional-array reshape


【解决方案1】:

一种方法是使用与新分割轴长度连接的形状信息计算新的形状元组,然后重新整形 -

A.reshape(A.shape[:-1] + (32,3))

示例运行 -

In [898]: A = np.random.rand(5,96)

In [899]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[899]: (5, 32, 3)

In [900]: A = np.random.rand(10,11,5,96)

In [901]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[901]: (10, 11, 5, 32, 3)

甚至适用于 1D 数组 -

In [902]: A = np.random.rand(96)

In [903]: A.reshape(A.shape[:-1] + (32,3)).shape
Out[903]: (32, 3)

有效,因为用于连接的前导轴为空,因此仅在此处使用拆分轴长度 -

In [904]: A.shape[:-1]
Out[904]: ()

In [905]: A.shape[:-1] + (32,3)
Out[905]: (32, 3)

【讨论】:

  • 如果有人在 Tensorflow 中使用它:确保在重塑之前手动将 A.shape 中的任何“无”尺寸转换为“-1”。
猜你喜欢
  • 2017-06-10
  • 2016-11-07
  • 2023-03-23
  • 2019-04-26
  • 2021-08-23
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多