Numpy ndarray形状有3个参数

use*_*650 5 python arrays numpy dataframe pandas

当提供3个参数时,我对ndarray的形状感到困惑:

例如,有什么区别:

np.zeros((2, 1, 3))
array([[[ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

和:

np.zeros((1, 2, 3))
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

在我看来,它们都代表2*3矩阵.

Wil*_*sem 7

不,形状不同,你必须注意方括号:

>>> np.zeros((2, 1, 3))
array([[[ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

与:

>>> np.zeros((1, 2, 3))
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,在第一次调用中,我们有两次方括号用于第二个维度,而在后者中,我们只有一个这样的对.

形状也不同:

>>> np.zeros((2, 1, 3)).shape
(2, 1, 3)
>>> np.zeros((1, 2, 3)).shape
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

所以在前者中我们有一个包含两个子列表的列表.这些子列表中的每一个都包含一个元素:三个元素的列表.在后者中,我们有一个包含一个元素的列表:一个包含两个元素的子列表,这两个元素是包含三个元素的列表.

所以一个类似于vanilla的Python列表将是:

[ [ [0, 0, 0] ], [ [0, 0, 0] ] ]
Run Code Online (Sandbox Code Playgroud)

与:

[ [ [0, 0, 0], [0, 0, 0] ] ]
Run Code Online (Sandbox Code Playgroud)