【发布时间】:2023-01-02 18:15:01
【问题描述】:
我对两个 Numpy 维度扩展代码感到困惑。
第一个代码是X[:, np.newaxis].
第二个代码是X[:, np.newaxis, :].
我在 Jupyter 上运行这段代码,但它返回相同的形状和结果。
有什么不同?
【问题讨论】:
-
你能告诉我们x的形状吗?
-
X 的形状是 (10, 2)。这两个代码返回 (10, 1, 2)。
我对两个 Numpy 维度扩展代码感到困惑。
第一个代码是X[:, np.newaxis].
第二个代码是X[:, np.newaxis, :].
我在 Jupyter 上运行这段代码,但它返回相同的形状和结果。
有什么不同?
【问题讨论】:
请参阅 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.
【讨论】:
我为像我这样困惑的人添加了几个例子。
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
【讨论】: