NumPy学习笔记(一)
# NumPy
### 安裝
- 通過安裝Anaconda安裝NumPy,一個開源的Python發行版本,其包含了conda、Python等180多個科學包及其依賴項,包含了大量的科學計算相關的包,其中就包括NumPy
- 通過pip安裝,
- 在windows中,控制臺中輸入命令安裝
```python
>pip install numpy
```
- 在ubuntu中,控制臺輸入命令安裝
```python
XXX:~/Desktop$sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
```
- 安裝驗證,進入python交互終端,輸入命令,沒有報錯則安裝成功
```python
>python
>>> import numpy as np
```
### numpy中最重要的對象---ndarray:
**Ndarray對象指的是用于存放同類型元素的多維數據,它是一個多維容器,N代表著它的維度**
#### 創建ndarray對象
- 通過array方法創建
- 參數說明
- 必選參數
- object 數組或嵌套的數列
- 可選參數
- dtype 數組元素的數據類型
- copy 對象是否需要復制
- order 創建數組的樣式,C為行方向,F為列方向,A為任意方向(默認)
- subok 默認返回一個與基類類型一致的數組
- ndmin 指定生成數組的最小維度
- demo
```python
>>> from numpy as np
>>> x = np.array([[1, 2, 3], [4, 5, 6]],dtype=np.int32,copy=True,order=None,subok=False,ndmin=0)
>>> type(x) # 查看x類型
<type 'numpy.ndarray'>
>>> x.shape # 查看ndarray對象的維度
(2, 3)
>>> x.dtype # 查看x里的數據類型
dtype('int32')
```
- 通過zeros/ones方法創建(創建指定大小的數組,數組元素以 0/1 來填充,)
- 參數說明
- 必要參數
- shape 數組形狀
- 可選參數
- dtype 數據類型
- order 'C' 用于 C 的行數組,或者 'F' 用于 FORTRAN 的列數組
- demo
```python
>>> np.zeros(5)
array([0., 0., 0., 0., 0.])
>>> np.zeros((3,3))
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
```
- 通過empty方法創建(創建一個指定形狀(shape)、數據類型(dtype)且未初始化的數組:)
- 參數說明
- 必要參數
- shape 數組形狀
- 可選參數
- dtype 數據類型
- 有"C"和"F"兩個選項,分別代表,行優先和列優先,在計算機內存中的存儲元素的順序
- demo
```python
>>> x = np.empty((3,2),dtype=int)
>>> x
array([[0, 0],
[0, 0],
[0, 0]])
>>> y = np.empty([3,2],dtype=int)
>>> y
array([[0, 0],
[0, 0],
[0, 0]])
```
- 其他方法:
- 通過full方法創建(創建一個填充給定值的n * n數組)
- demo
```python
>>> np.full([3,3],3)
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
```
- 通過eye方法創建(創建一個對角線是1,其余是0的多維數組)
- demo
```python
>>> np.eye(3)
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
>>> np.eye(1)
array([[1.]])
```
- 通過linspace方法創建(創建一個在指定的時間間隔內返回均勻間隔的數字的數組)
- demo
```python
>>> np.linspace(0,8.8,num=5)
array([0. , 2.2, 4.4, 6.6, 8.8])
```
- 通過random方法創建(創建一個填充0到1之間隨機值的數組)
- demo
```python
>>> np.random.random([3,3])
array([[0.17647511, 0.79086009, 0.26275058],
[0.83484953, 0.6386956 , 0.53928901],
[0.26020885, 0.58836421, 0.39308341]])
```
// TODO :補充
#### NumPy支持的數據類型(ndarray對象支持的數據類型)
名稱 | 描述
---|---
bool_ | 布爾型數據類型(True 或者 False)
int_ | 默認的整數類型(類似于 C 語言中的 long,int32 或 int64)
intc | 與 C 的 int 類型一樣,一般是 int32 或 int 64
intp | 用于索引的整數類型(類似于 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8 | 字節(-128 to 127)
int16 | 整數(-32768 to 32767)
int32 | 整數(-2147483648 to 2147483647)
int64 | 整數(-9223372036854775808 to 9223372036854775807)
uint8 | 無符號整數(0 to 255)
uint16 | 無符號整數(0 to 65535)
uint32 | 無符號整數(0 to 4294967295)
uint64 | 無符號整數(0 to 18446744073709551615)
float_ | float64 類型的簡寫
float16 | 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32 | 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64 | 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_ | complex128 類型的簡寫,即 128 位復數
complex64 | 復數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128 | 復數,表示雙 64 位浮點數(實數部分和虛數部分)
#### ndarray對象的屬性
屬性 | 說明
---|---
ndarray.ndim | 秩,即軸的數量或維度的數量
ndarray.shape | 數組的維度,對于矩陣,n 行 m 列
ndarray.size | 數組元素的總個數,相當于 .shape 中 n*m 的值
ndarray.dtype | ndarray 對象的元素類型
ndarray.itemsize| ndarray 對象中每個元素的大小,以字節為單位
ndarray.flags | ndarray 對象的內存信息
ndarray.real | ndarray元素的實部
ndarray.imag | ndarray 元素的虛部
ndarray.data | 包含實際數組元素的緩沖區,由于一般通過數組的索引獲取元素,所以通常不需要使用這個屬性。
demo
```python
>>> a = np.full((3,3),3)
>>> a
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
>>> a.ndim
2
>>> a.shape
(3, 3)
>>> a.size
9
>>> a.dtype
dtype('int32')
>>> a.itemsize
4
>>> a.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
>>> a.real
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
>>> a.imag
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
>>> a.data
<memory at 0x0FE0E990>
```
#### ndarray對象的的基本操作
- 加減乘除四則運算
```python
>>> a = np.full((3,3),3)
>>> a
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
>>> a+1
array([[4, 4, 4],
[4, 4, 4],
[4, 4, 4]])
>>> a-2
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
>>> a*5
array([[15, 15, 15],
[15, 15, 15],
[15, 15, 15]])
>>> a/3
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> a
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
>>> b = np.full((3,3),3)
>>> b
array([[3, 3, 3],
[3, 3, 3],
[3, 3, 3]])
>>> a+b
array([[6, 6, 6],
[6, 6, 6],
[6, 6, 6]])
>>> a += b
>>> a
array([[6, 6, 6],
[6, 6, 6],
[6, 6, 6]])
```
**注意:雖然可以對兩個ndarray對象進行操作,但是如果沒有賦值,不會改變原來的ndarray對象**
##### 當對兩個ndarray對象數據類型精度不一樣進行操作時,結果的精度為更精確的那個數據類型
```python
>>> a = np.array([[0.1,0.2,0.3],[0.3,0.2,0.1]],dtype=np.float32)
>>> a
array([[0.1, 0.2, 0.3],
[0.3, 0.2, 0.1]], dtype=float32)
>>> b = np.array([[0.3,0.2,0.1],[0.1,0.2,0.3]],dtype=np.float64)
>>> b
array([[0.3, 0.2, 0.1],
[0.1, 0.2, 0.3]])
>>> c = a+b
>>> c
array([[0.4 , 0.4 , 0.40000001],
[0.40000001, 0.4 , 0.4 ]])
>>> c.dtype
dtype('float64')
```
- 常用數學函數sum、min、max等
```python
>>> a = np.arange(12).reshape(4,3) # reshape可以設置輸出時的維度
>>> a
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> a.sum()
66
>>> a.sum(axis=0) # axis=0表示求列的相關操作
array([18, 22, 26]) # axis=1表示求行的相關操作
>>> a.sum(axis=1)
array([ 3, 12, 21, 30])
>>> a.min()
0
>>> a.min(axis=0)
array([0, 1, 2])
>>> a.min(axis=1)
array([0, 3, 6, 9])
>>> a.max()
11
>>> a.max(axis=0)
array([ 9, 10, 11])
>>> a.max(axis=1)
array([ 2, 5, 8, 11])
>>> np.sin(a)
array([[ 0. , 0.84147098, 0.90929743],
[ 0.14112001, -0.7568025 , -0.95892427],
[-0.2794155 , 0.6569866 , 0.98935825],
[ 0.41211849, -0.54402111, -0.99999021]])
>>> np.cos(a)
array([[ 1. , 0.54030231, -0.41614684],
[-0.9899925 , -0.65364362, 0.28366219],
[ 0.96017029, 0.75390225, -0.14550003],
[-0.91113026, -0.83907153, 0.0044257 ]])
>>> np.tan(a)
array([[ 0.00000000e+00, 1.55740772e+00, -2.18503986e+00],
[-1.42546543e-01, 1.15782128e+00, -3.38051501e+00],
[-2.91006191e-01, 8.71447983e-01, -6.79971146e+00],
[-4.52315659e-01, 6.48360827e-01, -2.25950846e+02]])
```
- 類似于python中列表的操作
- 索引,一維數組的索引和列表一樣,多維數組的索引需要根據維度索引
```python
>>> a = np.arange(12)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a[0]
0
>>> a[11]
11
>>> b = np.arange(12).reshape(2,6)
>>> b[0,0]
0
>>> b[5,5]
>>> b[1,5]
11
```
- 切片,與python中的列表相似,也是左包含右不包含
```python
>>> b[:,5]
array([ 5, 11])
>>> b[1,1:2]
array([7])
>>> b[1,1:5]
array([ 7, 8, 9, 10])
```
**多維數組切片時,一定要注意好維度,根據維度來切片**
- 迭代,與python的列表相似,都可以用for in 來遍歷ndarray對象,一維數組遍歷和列表一樣,多維數組遍歷會得到次維的數組
```python
>>> for i in b:
... print(i)
...
[0 1 2 3 4 5]
[ 6 7 8 9 10 11]
```
轉載于:https://www.cnblogs.com/silencehuliang/p/10567328.html
總結
以上是生活随笔為你收集整理的NumPy学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面经搜集
- 下一篇: mssql sqlserver 对不同群