【问题标题】:Difference of Numpy Dimension Expand codeNumpy Dimension Expand代码的区别
【发布时间】:2023-01-02 18:15:01
【问题描述】:

我对两个 Numpy 维度扩展代码感到困惑。

第一个代码是X[:, np.newaxis].

第二个代码是X[:, np.newaxis, :].

我在 Jupyter 上运行这段代码,但它返回相同的形状和结果。

有什么不同?

【问题讨论】:

  • 你能告诉我们x的形状吗?
  • X 的形状是 (10, 2)。这两个代码返回 (10, 1, 2)。

标签: python arrays numpy


【解决方案1】:

请参阅 newaxis 的 numpy 文档。 https://numpy.org/doc/stable/reference/constants.html#numpy.newaxis

x = np.arange(3)

x[newaxis, :] 等同于 x[newaxis] 和 x[None]np.newaxis 之后的任何维度仍然存在于结果数组中,即使没有明确表示为切片 :

x[np.newaxis, :].shape
#(1, 3)
x[np.newaxis].shape
#(1, 3)
x[None].shape
#(1, 3)
x[:, np.newaxis].shape
#(3, 1)

因此在你的情况下

X[:,np.newaxis] is X[:, np.newaxis, :]
#True

PS- 我认为您对省略号...np.newaxis 感到困惑。

X[...,np.newaxis].shape
#(10,2,1)
# newaxis is introduced after all the previous dimensions 
X[:, np.newaxis].shape
#(10,1,2)
# newaxis is introduced at 1st index or 2nd position.

【讨论】:

  • 谢谢您的回答。我现在正在学习 O'REILLY 的 Python 数据科学手册。我被书中的表达式 X[:, np.newaxis, :] 弄糊涂了。谢谢你。
【解决方案2】:

我为像我这样困惑的人添加了几个例子。

X = np.array([[i for i in range(10)], [i for i in range(10)]])
# (2, 10)

X[np.newaxis, :, :]
# (1, 2, 10) <- Same as X[np.newaxis]

X[:, np.newaxis, :]
# (2, 1, 10) <- Same as X[:, np.newaxis]

X[:, :, np.newaxis]
# (2, 10, 1) <- Same as X[:, :, np.newaxis]

在 Summary 中,参数是 axis 和 np.newaxis。
此外,只有当您首先要添加新轴时,您才可以输入 np.newaxis。
(这意味着,您可以跳过 np.newaxis 之后的轴参数)

这是 newaxis 方法的文档。 https://numpy.org/doc/stable/reference/constants.html#numpy.newaxis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 2021-08-19
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2020-03-28
    • 2021-12-02
    相关资源
    最近更新 更多