# NumPy
## The Basics
NumPy 主要面向的對(duì)象是齊次多維數(shù)組僵蛛。在NumPy中維度(dimension)被稱為軸(axe)咏尝。軸的個(gè)數(shù)即為秩(rank)。
例如火架,一個(gè)坐標(biāo)為[1, 2, 1]的點(diǎn)的秩為1闻牡,因?yàn)樗挥幸粋€(gè)軸灌闺,并且這個(gè)軸的長(zhǎng)度為3嗡善。下面這個(gè)例子篡腌,這個(gè)數(shù)組的秩為2碱璃。第一個(gè)軸的長(zhǎng)度為2弄痹,第二個(gè)軸的長(zhǎng)度為3
```
[[1,0,0],
[0,1,2]]
```
NumPy的數(shù)組類(class)被稱為ndarray。它的別名(alias)被叫做數(shù)組嵌器。需要注意的是肛真,numpy.array與標(biāo)準(zhǔn)Python庫(kù)類array.array不一樣,它只處理一維數(shù)組爽航,并且提供較少的功能蚓让。ndarray的主要屬性如下:
- ndarray.admin
? ? 數(shù)組的軸(axe)的數(shù)量。在Python中維度即為秩.
- ndarray.shape
? ? 這個(gè)屬性包含了數(shù)組的各向維度讥珍,例如一個(gè)m*n的矩陣历极,其shape為元組(m,n)
- ndarray.size
? ? 數(shù)組中元素總共的數(shù)目。
- ndarray.dtype
? ? 用于描述數(shù)組中元素的類型
- ndarray.itemsize
? ? 數(shù)組中每個(gè)元素的字節(jié)數(shù)衷佃。例如趟卸,一個(gè)float64的字節(jié)數(shù)為8 =(64/8),等價(jià)于ndarray.dtype,itemsize。
- ndarray.data
? ? 用于存儲(chǔ)數(shù)組的實(shí)際元素锄列。
```Python
>>> import numpy as np
>>> a = np.arange(15).reshape(3,5)
>>> a
array([[ 0,? 1,? 2,? 3,? 4],
? ? ? [ 5,? 6,? 7,? 8,? 9],
? ? ? [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int32'
>>> a.itemsize
4
>>> type(a)
>>> b = np.array([6,7,8])
>>> b
array([6, 7, 8])
>>> type(b)
```
## Array Creation
```Python
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a = np.array(1,2,3,4)? # wrong
Traceback (most recent call last):
? File "", line 1, in
? ? a = np.array(1,2,3,4)
ValueError: only 2 non-keyword arguments accepted
>>> b = np.array([(1.5,2,3),(4,5,6)])
>>> b
array([[ 1.5,? 2. ,? 3. ],
? ? ? [ 4. ,? 5. ,? 6. ]])
>>> c = np.array([[1,2],[3,4]], dtype=complex)
>>> c
array([[ 1.+0.j,? 2.+0.j],
? ? ? [ 3.+0.j,? 4.+0.j]])
>>> np.zeros((3,4))
array([[ 0.,? 0.,? 0.,? 0.],
? ? ? [ 0.,? 0.,? 0.,? 0.],
? ? ? [ 0.,? 0.,? 0.,? 0.]])
>>> np.ones(shape=(2,3),dtype=np.int16)
array([[1, 1, 1],
? ? ? [1, 1, 1]], dtype=int16)
>>> np.empty((2,3))
array([[? 3.90311860e-322,? 0.00000000e+000,? 2.78145267e-307],
? ? ? [? 4.00537061e-307,? 2.23419104e-317,? 8.36014030e+250]])
```
numpy.arange([start,]stop,[step,]dtype=None)
- 功能:在區(qū)間[statr,stop)之間生成一個(gè)步長(zhǎng)為step的連續(xù)數(shù)組图云。start的默認(rèn)值為0,默認(rèn)步長(zhǎng)為1
numpy.linspace(start,stop,num=50,endpoint=True,restep=False,dtype=None)
- start:必要參數(shù)邻邮,返回序列的起始位置竣况。
- stop:返回序列的最后一個(gè)位置。
- num:采樣點(diǎn)的數(shù)目筒严,即序列的長(zhǎng)度丹泉。
- endpoint:如果為True,則對(duì)于區(qū)間進(jìn)行num-1等分,并且序列最后一個(gè)點(diǎn)為stop,如果為False鸭蛙,則對(duì)于區(qū)間盡心num等分摹恨,并且區(qū)間最后一個(gè)點(diǎn)為stop前一點(diǎn)。
- restep:默認(rèn)值為False规惰。如果為True睬塌,返回值為(samples,step)
```Python
>>> np.linspace(start=1,stop=5,num=4)
array([ 1.? ? ? ? ,? 2.33333333,? 3.66666667,? 5.? ? ? ? ])
>>> np.linspace(start=1,stop=5,num=4,endpoint=False)
array([ 1.,? 2.,? 3.,? 4.])
```
numpy.random.rand(d0, d1,..., dn)
- d0,d1,...,dn:shape
- return: ndarray,shape(d0, d1,...,dn)
```Python
>>> np.random.rand(3,2)
array([[ 0.17227376,? 0.22609618],
? ? ? [ 0.53162876,? 0.70428079],
? ? ? [ 0.30794007,? 0.36767049]])
```
## Ptinting Arrays
```Python
>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5]
>>> b = np.arange(12).reshape(4,3)
>>> b
array([[ 0,? 1,? 2],
? ? ? [ 3,? 4,? 5],
? ? ? [ 6,? 7,? 8],
? ? ? [ 9, 10, 11]])
>>> print(b)
[[ 0? 1? 2]
[ 3? 4? 5]
[ 6? 7? 8]
[ 9 10 11]]
>>> c = np.arange(24).reshape(2,3,4)
>>> print(c)
[[[ 0? 1? 2? 3]
? [ 4? 5? 6? 7]
? [ 8? 9 10 11]]
[[12 13 14 15]
? [16 17 18 19]
? [20 21 22 23]]]
```
## Basic Operations
```Python
>>> a = np.array([20,30,40,50])
>>> b = np.arange(4)
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9], dtype=int32)
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624,? 7.4511316 , -2.62374854])
>>> a<35
array([ True,? True, False, False], dtype=bool)
>>>
```