如何理解python numpy数组中的空维度?

Kid*_*g_C 4 python arrays numpy dimensions

在python numpy包中,我无法理解ndarray第二维空为的情况.这是一个例子:

    In[1]: d2 = np.random.rand(10)
    In[2]: d2.shape = (-1, 1)

    In[3]: print d2.shape
    In[4]: print(d2)

    In[5]: print d2[::2, 0].shape
    In[6]: print d2[::2, 0]

    Out[3]:(10, 1)
    Out[4]:
[[ 0.12362278]
 [ 0.26365227]
 [ 0.33939172]
 [ 0.91501369]
 [ 0.97008342]
 [ 0.95294087]
 [ 0.38906367]
 [ 0.1012371 ]
 [ 0.67842086]
 [ 0.23711077]]

    Out[5]: (5,)
    Out[6]: [ 0.12362278  0.33939172  0.97008342  0.38906367  0.67842086]
Run Code Online (Sandbox Code Playgroud)

我的理解是d2是10行乘1列ndarray.Out [6]显然是一个1乘5的数组,尺寸怎么可以是(5,)?空的第二维是什么意思?

Hun*_*Hun 6

让我举一个例子来说明一个重要的区别.

d1 = np.array([1,2,3,4,5]) # array([1, 2, 3, 4, 5])
d1.shape -> (5,) # row array.    
d1.size -> 5
# Note: d1.T is the same as d1.

d2 = d1[np.newaxis] # array([[1, 2, 3, 4, 5]]). Note extra []
d2.shape -> (1,5) 
d2.size -> 5
# Note: d2.T will give a column array
array([[1],
       [2],
       [3],
       [4],
       [5]])
d2.T.shape -> (5,1)
Run Code Online (Sandbox Code Playgroud)


Ozg*_*urk 6

我还认为 ndarrays 甚至可以将一维数组表示为厚度为 1 的二维数组。也许因为“ndarray”这个名字让我们认为是高维的,但是,n 可以是 1,所以 ndarrays 可以只有一维.

比较这些

x = np.array([[1], [2], [3], [4]])
x.shape
# (4, 1)
x = np.array([[1, 2, 3, 4]])
x.shape
#(1, 4)
x = np.array([1, 2, 3, 4])
x.shape
#(4,)
Run Code Online (Sandbox Code Playgroud)

(4,) 表示 (4)。

如果我重塑 x 并回到(4),它会回到原来的

x.shape = (2,2)
x
# array([[1, 2],
#       [3, 4]])
x.shape = (4)
x
# array([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)