
文章目錄
- numpy初識
- 一、numpy是什么?
- 二、numpy陣列
- 2.1 陣列使用
- 2.2 創建陣列
- 1. 使用empty創建空陣列
- 2. 使用arange函式創建
- 3. 使用zeros函式生成陣列
- 4. ones函式生成陣列
- 5. diag函式生成對角矩陣
- 6. N維陣列
- 2.3 訪問陣列元素
- 三、了解矩陣
- 3.1 廣播
- 驚喜
numpy初識
一、numpy是什么?
擴展庫numpy是Python支持科學計算的重要擴展庫,是資料分析和科學計算領域如scipy、pandas、sklearn 等眾多擴展庫中的必備擴展庫之一,提供了強大的N維陣列及其相關運算、復雜的廣播函式、C/C++和Fortran代碼集成工具以及線性代數、傅里葉變換和亂數生成等功能,本章童點介紹陣列與矩陣及其相關運算,為學習和理解后面章節中的資料分析、機器學習打下良好的基礎,
簡單來說就是你用來為人工智能領域打基礎的東西,私話說得好,基礎不牢,地動山搖嘛~
所以這個地方可要好好學習哦~~
二、numpy陣列
在numpy中使用的不是python自帶的資料型別list,而是numpy中的ndarray
那為什么使用ndarray而不是使用list呢?
因為ndarray是由c/c++寫出來的,占用記憶體更小,使用速度更快
創建一個ndarray的方法有很多,這里說下使用array方法轉化的
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/26 22:22
# @Version: 1.0
import numpy as np
li = [1, 2, 3]
tp = (1, 2, 3)
nday1 = np.array(li)
nday2 = np.array(tp)
print("*****型別*****")
print(type(nday1))
print(type(nday2))
print("*****陣列*****")
print(nday1)
print(nday2)
輸出結果:
*****型別*****
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
*****陣列*****
[1 2 3]
[1 2 3]
2.1 陣列使用
如果元素相同的話,可以進行加減乘除
- 在元素個數相同的情況下,可以進行陣列間的加減
- 在元素個數相同的情況下,可以進行陣列間的乘除
- 對某個數進行的乘除,可以自動進行到所有元素
看例子理解:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/26 22:22
# @Version: 1.0
import numpy as np
li = [1, 2, 3] # 串列
tp = (1, 2, 3) # 元組
nday1 = np.array(li) # 內置方法將串列轉為ndarray
nday2 = np.array(tp) # 內置方法將元組轉為ndarray
nday3 = np.array(range(5)) # 使用range內置函式方法生成ndarray連續陣列
nday4 = np.array(range(5, 10)) # 使用range內置函式方法生成ndarray連續陣列
print("*****型別*****")
print(type(nday1))
print(type(nday2))
print(type(nday3))
print(type(nday4))
print("*****陣列*****")
print(nday1)
print(nday2)
print(nday3)
print(nday4)
print("*****陣列加減*****")
print(nday2 + nday1)
print(nday2 - nday1)
print(nday4 - nday3)
print(nday3 + nday4)
# 在元素個數相同的情況下,可以進行陣列間的加減
print("*****陣列乘除*****")
print(nday2 * nday1)
print(nday2 // nday1)
print(nday4 * nday3)
print(nday4 // nday3)
# 在元素個數相同的情況下,可以進行陣列間的乘除
print(nday1 * 3)
print(nday2 // 2)
print(nday3 * 2)
print(nday4 // 2)
# 對某個數進行的乘除,可以自動進行到所有元素
運行結果:
*****型別*****
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
*****陣列*****
[1 2 3]
[1 2 3]
[0 1 2 3 4]
[5 6 7 8 9]
*****陣列加減*****
[2 4 6]
[0 0 0]
[5 5 5 5 5]
[ 5 7 9 11 13]
*****陣列乘除*****
[1 4 9]
[1 1 1]
[ 0 6 14 24 36]
[0 0 0 0 0]
[3 6 9]
[0 1 1]
[0 2 4 6 8]
[2 3 3 4 4]
2.2 創建陣列
剛剛的array()方法是將串列和元組等迭代物件轉為ndarray陣列
接下來要說的是自動創建陣列
1. 使用empty創建空陣列
里面會有初始值,但是陣列初始為None
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/28 12:29
# @Version: 1.0
import numpy as np
em1 = np.empty(5) # 創建一個長度為5的空陣列
em2 = np.empty((2, 2)) # 創建一個2*2的空二維陣列
print("一維陣列,長度為5", em1)
print("二維陣列,長度為2*2", em2)
輸出結果:
[9.96754604e-312 9.96754614e-312 2.60799828e-310 9.34609789e-307
0.00000000e+000]
[[6.95299778e-310 9.96747617e-312]
[0.00000000e+000 6.95299776e-310]]
2. 使用arange函式創建
arange是numpy自帶的的一個方法,作用與range這個Python內置函式相差無幾,都是生成陣列
先匯入numpy包
import numpy as np
然后創建陣列
print("*****ararge創建陣列*****")
aran_arr1 = np.arange(5)
aran_arr2 = np.arange(5, 10)
print("*****型別*****")
print(type(aran_arr1))
print(type(aran_arr2))
print("*****陣列*****")
print(aran_arr1)
print(aran_arr2)
3. 使用zeros函式生成陣列
zeros函式是numpy自帶的方法,作用是生成指定數量的全0一維陣列,全0二維陣列等
看下面的例子:
生成一個具有三個元素的一維陣列和一個具有五個元素的一維陣列:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/27 21:31
# @Version: 1.0
import numpy as np
zero_arr = np.zeros(3)
zrro_arr2 = np.zeros(5)
print(zero_arr)
print(zrro_arr2)
運行結果:
[0. 0. 0.]
[0. 0. 0. 0. 0.]
當然這只是一位陣列,你還可以生成二維陣列,也就是矩陣
使用如下代碼可以生成一個三行三列的矩陣
zero_arr3 = np.zeros((3, 3))
輸出看看:
print(zero-arr3)
運行結果:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
4. ones函式生成陣列
使用ones函式生成全1函式,方法同zeros
import numpy as np
ones_arr1 = np.ones(3)
輸出結果:
[1. 1. 1.]
生成一個三行三列的矩陣
import numpy as np
ones_arr2 = np.ones((3, 3))
輸出結果:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
5. diag函式生成對角矩陣
什么是對角矩陣?你應該聽說過對角線,矩陣就是生成在對角線上的矩陣
函式引數是一個元祖
看代碼和運行結果能夠理解的更深刻
import numpy as np
diag_arr = np.diag((4, 3, 2, 1))
將diag_arr的輸出的結果為:
[[4 0 0 0]
[0 3 0 0]
[0 0 2 0]
[0 0 0 1]]
看,對角線是不是你函式的引數,這下理解了吧
6. N維陣列
N維陣列就是多維陣列,可以理解為陣列里面還是陣列,里面還是陣列,可以參照這個形式
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
這個概念確實有點抽象,有點難理解,這就是一個三維陣列,是通過三維串列使用array方法轉換成ndarray的
代碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/27 13:29
# @Version: 1.0
import numpy as np
li = [
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
]
te1 = np.array(li)
print(te1)
當然,二維陣列也算是N維陣列
2.3 訪問陣列元素
numpy自帶了一個insert函式,可以往陣列中插入元素
看實體:
li = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]
gb1 = np.array(li)
np.insert(gb1, 1, [1, 2, 3, 4])
輸出結果:
[1 1 2 3 4 2 3 4 5 6 7 8 2 4 6 8]
還有一個自帶的add函式,可以進行陣列的相加減
陣列嘛,可以使用下標來獲取陣列元素
import numpy as np
li1 = [1, 2, 3, 4]
gb2 = np.array(li1)
print(gb2[1])
輸出結果為:
2
當然,它是一個陣列,你理所應當的也可以使用回圈陳述句來遍歷陣列
三、了解矩陣
陣列是陣列,矩陣是矩陣,
陣列是一種資料結構,可以存盤多種資料,可以有多維
矩陣是數學中的一個概念,只能存放數字,并且只能是二維的形式
生成矩陣的方法就和生成N維陣列的方法是一樣的
先使用串列創建二維串列,然后再使用numpy的方法轉成矩陣,當然也有好幾中生成矩陣的方法
import numpy as np
li = [[1, 2, 3, 4], [5, 6, 7, 8]]
j1 = np.matrix(li)
print(j1)
print(type(j1))
print(j1.dtype)
輸出該矩陣:
輸出矩陣: [[1 2 3 4]
[5 6 7 8]]
矩陣在Python的型別: <class 'numpy.matrix'>
在numpy中的型別: int32
矩陣可以進行各種數學運算,在numpy中都得到了很好的支持,這里就不細說了
3.1 廣播
何為廣播,廣播就是能將你的東西發送到各個區域,一般在計算機中是將資訊發送到局域網路中的每個計算機中,
而在numpy中也有廣播,只不過他是將元素自動補到陣列,矩陣上,就像你在上面看到的,一個陣列乘除一個元素,陣列中的所有元素都會乘這個數
import numpy as np
li1 = [1, 2, 3, 4]
print(np.array(li1)*10)
輸出結果:
[10 20 30 40]
這個就是廣播,就是將數字10播到li轉成的陣列中,能夠讓陣列所有元素都乘10,
而不同維度的陣列也可以這樣
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Smly
# @datetime: 2021/9/27 13:40
# @Version: 1.0
import numpy as np
li = [[1, 2, 3, 4], [5, 6, 7, 8], [2, 4, 6, 8]]
gb1 = np.array(li)
li1 = [1, 2, 3, 4]
gb2 = np.array(li1)
print(gb1*gb2)
將一維陣列的每個元素挨個廣播到二維陣列,前提是:
二維陣列中的一維陣列的個數與一維陣列的個數是相同的
運行結果:
[[ 1 4 9 16]
[ 5 12 21 32]
[ 2 8 18 32]]
驚喜
關注下方公眾號,領取更多福利
- python基礎教程
- python知識腦圖
- python入門100例
- C語言資料結構教程
- C語言演算法100題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335465.html
標籤:其他
