什么是ndarray?
ndarray是Numpy的核心數(shù)據(jù)結(jié)構(gòu),一個ndarray對象代表了一個n維數(shù)組,是一系列同類型數(shù)據(jù)的集合。
ndarray可以理解為能夠進行更復(fù)雜運算的list。
實際上,ndarray是對數(shù)學(xué)中張量 (通俗理解張量, 戳這里)這一概念的邏輯表達,通俗地講,1維的張量就是向量,2維的張量就是矩陣。除了負責(zé)存儲數(shù)據(jù)之外,ndarray還提供了許多向量、矩陣的運算,例如點乘、轉(zhuǎn)置、求均值等等。
一個典型的ndarray結(jié)構(gòu)如下圖所示:

可以看到,ndarray由兩個部分組成:
- header:信息頭,存放了指向數(shù)據(jù)區(qū)塊的指針,數(shù)據(jù)類型的描述,以及數(shù)組的維度信息等
- data:數(shù)據(jù)塊,一系列相同大小的內(nèi)存塊,存放的就是實際的數(shù)據(jù)值
ndarray的構(gòu)造
np.array(data) 方法用于從現(xiàn)有數(shù)據(jù)構(gòu)造ndarray,data可以是手動輸入的數(shù)據(jù)、列表、ndarray
>>> import numpy as np
>>> a=np.array([1,2,3,4])#可以直接輸入數(shù)據(jù)
>>> print(a)
[1 2 3 4]
>>>data=range(1,10)
>>> b=np.array(data)#也可以基于list構(gòu)造ndarray
>>> print(b)
[1 2 3 4 5 6 7 8 9]
>>> c=np.array(b) #當然,從現(xiàn)有的ndarray構(gòu)造也可以
>>> print(c)
[1 2 3 4 5 6 7 8 9]
Numpy也提供了一些方法用于創(chuàng)建特殊的矩陣:
一般情況下,它們的調(diào)用方式為np.xxx(shape),其中,shape是一個元組,表示將要創(chuàng)建的ndarray的形狀。例如,np.empty((5,3))就表示創(chuàng)建一個5行3列的空矩陣。
>>> import numpy as np
#創(chuàng)建一個空的二維ndarray
>>> a=np.empty((5,3))
>>> print(a)#注意這里的數(shù)據(jù)并非真正意義上的空值,解釋器仍會將其初始化
[[6.23042070e-307 1.89146896e-307 1.37961302e-306]
[1.05699242e-307 8.01097889e-307 1.78020169e-306]
[7.56601165e-307 1.02359984e-306 1.33510679e-306]
[2.22522597e-306 1.78019761e-306 1.78019761e-306]
[1.20160711e-306 2.56765117e-312 0.00000000e+000]]
#創(chuàng)建一個三維全1數(shù)組
>>> b=np.ones((2,3,5))
>>> print(b)
[[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]]
#創(chuàng)建一個全0向量
>>> c=np.zeros((10))
>>> print(c)#如果在shape中只傳入一個參數(shù),那么默認是行向量的長度
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
#創(chuàng)建一個對角矩陣
>>> d=np.eye(5)
>>> print(d)
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
總結(jié)
| 方法名 | 功能 |
|---|---|
| array(data) | 從現(xiàn)有數(shù)據(jù)創(chuàng)建ndarray |
| empty(shape) | 創(chuàng)建空數(shù)組 |
| ones(shape) | 創(chuàng)建全1數(shù)組 |
| zeros(shape) | 創(chuàng)建全0數(shù)組 |
| eye(shape) | 創(chuàng)建對角矩陣 |