numpy expand_dim() 中的 (13027,) 和 (13027,1) 有什么区别

What is the difference between (13027,) and (13027,1) in numpy expand_dim()

在应用调用 np.expand_dim(b, axis=1).

之前和之后,我将调用 .shape 应用于变量 b 之后,这是一段代码中的两个输出

我看到 _dim 部分可能看起来像是一个死赠品,但输出似乎没有什么不同,除了可能将行向量转换为列向量(?):

b[208. 193. 208. ... 46. 93. 200.] 行向量,但 np.expand_dim(b, axis=1) 给出:

[[208.]
 [193.]
 [208.]
 ...
 [ 46.]
 [ 93.]
 [200.]]

这可以解释为列向量 (?),而不是任何增加的维数。

(13027,) 将 x 轴视为 0,而 (13027,1) 将 x 轴视为 1。

https://numpy.org/doc/stable/reference/generated/numpy.expand_dims.html

它就像“i”,默认情况下 i = 0,所以如果您没有明确定义它,它将从 0 开始。

What is the difference between (13027,) and (13027,1)

它们是不同维度的数组,一些操作对它们的应用也不同。例如

>>> a = np.arange(5)
>>> b = np.arange(5, 10)
>>> a + b
array([ 5,  7,  9, 11, 13])
>>> np.expand_dims(a, axis=1) + b
array([[ 5,  6,  7,  8,  9],
       [ 6,  7,  8,  9, 10],
       [ 7,  8,  9, 10, 11],
       [ 8,  9, 10, 11, 12],
       [ 9, 10, 11, 12, 13]])

最后的结果就是我们所说的广播,你可以在numpy中阅读docs, or even

基本上np.expand_dims在指定的维度上添加新的轴,以下所有的都达到相同的结果

>>> a.shape
(5,)
>>> np.expand_dims(a, axis=(0, 2)).shape
(1, 5, 1)
>>> a[None,:,None].shape
(1, 5, 1)
>>> a[np.newaxis,:,np.newaxis].shape
(1, 5, 1)

请注意,在 numpy 中,一维数组的转置仍然是一维数组。它不像在 MATLAB 中行向量变成列向量。

>>> a
array([0, 1, 2, 3, 4])
>>> a.T
array([0, 1, 2, 3, 4])
>>> a.T.shape
(5,)

因此,为了将其转换为“列向量”,您必须通过广播(或重塑)将数组从形状 (N,) 转换为 (N, 1)。但是您最好将其视为 N 行的二维数组,每行 1 个元素。