Python 用NumPy創建二維數組的案例

前言

上位機實戰開發先放一放,今天來學習一個新的內容—NumPy的使用

1 一維數組

例:用普通方法生成一維數組

num = [0 for i in range(1,5)] # 創建一維數組
print(num) # 打印數組
print("-"*50) # 分割線
num[2]=6 # 將第三個元素修改位6
print(num) # 打印數組
print("-"*50) # 分割線

運行結果

例:用numpy生成一維數組

from numpy import *
m1 = arange(5)
print(m1)
print("-"*50) # 分割線

運行結果

2 二維數組

例:用普通方法生成二維數組

num = [[0 for i in range(1,5)]for j in range(1,5)]
print(num) # 打印數組
print("-"*50) # 分割線
num[2][1]=3 # 將第三行第二個元素修改為3
print(num) # 打印數組
print("-"*50) # 分割線

運行結果

例:用numpy生成二維數組

from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 創建6行3列的二維數組
print(m1)
print("-"*50) # 分割線

運行結果

通過上圖發現,用普通方法創建的數組分隔符有逗號,而numpy創建的數組分隔符默認為空格。

3 二維數組的分片

請看程序註釋以及結果對照

from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 創建6行3列的二維數組
print(m1)
print("-"*50) # 分割線
print(m1[1][0:]) # [x][0:] 獲取第x行的全部元素(單行)
print("-"*50) # 分割線
print(m1[1:3]) # [x1:x2] 獲取第x1~x2行的全部元素(多行)
print("-"*50) # 分割線
print(m1[1::4]) # [x1::x2] 分片操作,從第x1行開始,步長為x2

運行結果

4 數組維度的操作

.reshape:將一維數組變成多維數組

用法:一維數組名.reshape(x,y,z)將一維數組改成三維數組

from numpy import *
m1 = array([arange(1,9)]) # 創建一維數組
print(m1)
print("-"*50) # 分割線
print(m1.reshape(2,2,2)) # 將一維數組轉為三維數組
print("-"*50) # 分割線

運行結果

.ravel或flatten:將多維數組變為一維數組

用法:數組名.ravel()或 數組名.flatten()

from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 創建6行3列的二維數組
print(m1)
print("-"*50) # 分割線
print(m1.ravel()) # 將一維數組轉為三維數組
print("-"*50) # 分割線

運行結果

.shape:將 高維數組 轉換成 低維數組

用法:數組名.shape(x行,列)

.transpose:將數組進行轉置

用法:數組名.transpose()

from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 創建6行3列的二維數組
print(m1)
print("-"*50) # 分割線
print(m1.transpose()) # 將數組轉置
print("-"*50) # 分割線

運行結果

5 數組的組合與分隔

5.1 水平組合

hastck:將數組水平拼接到一起

用法:hastck((數組A,數組B))水平拼接數組A和B

5.2 垂直組合

vstack:將數組垂直拼接到一起

用法:vstack(數組A,數組B)垂直拼接數組A和B

5.3 水平分隔

hsplit:

用法:hsplit(數組名,x)x為分成幾部分

5.4 垂直分隔

vsplit:

用法:vsplit(數組名,x)x為分成幾部分

6 數組轉列表

.tolist:將數組轉列表

用法:數組名.tolist()

7 數組的存儲和讀取及分隔符

savetxt和loadtxt函數可將數組保存為CSV文件。CSV文件的分隔符包括空格,逗號,分號等。savetxt和loadtxt函數默認使用的時空格作為分割符,也可以用delimiter關鍵字指定分隔符。

7.1數組的存儲

savetxt

用法:savetxt(“文件名.txt”,數組名,fmt=數組格式,delimiter=’;’)

補充:數組格式可以為 整數型(%d)浮點型(%f)

from numpy import *
m1 = array([arange(1,4),arange(4,7),arange(7,10),arange(10,13),arange(13,16),arange(16,19)]) # 創建6行3列的二維數組
print(m1)
print("-"*50) # 分割線
savetxt("文件名.txt",m1,fmt='%d',delimiter=';')

運行結果1

運行結果2(分隔符為空格)

7.2數組的讀取

loadtxt

用法:新數組 = loadtxt(“文件名.txt”,dtype=‘數組格式’,delimiter=’,’)

補充:數組格式可以為 整數型(int)浮點型(float)

from numpy import *
print("-"*50) # 分割線
a = loadtxt("文件名.txt",dtype=int,delimiter=';')
print(a) # 將數組轉置
print("-"*50) # 分割線

運行結果

總結

savetxt在保存數據時也可以將普通數組中的分隔符改為空格

利用這個方法我們可以將帶有逗號的二維數組改為分隔符為空格或者分號的二維數組。

例:用列表的方法寫一個二維數組

# 二維數組創建
from numpy import *
num = [[0 for j in range(1,5)]for i in range(1,4)]
print(num) # 打印數組
print("-"*50) # 分割線
num[2][1]=3 # 將第三行第二個元素修改為3
print(num) # 打印數組
print("-"*50) # 分割線
savetxt("a.txt",num,fmt='%d',delimiter=' ') # 將數組保存為分隔符為空格的形式
b = loadtxt("a.txt",dtype=int,delimiter=' ') # 將數組讀取出來賦給新數組
print(b) # 打印新數組
print("-"*50) # 分割線

運行結果

先將數組保存,然後讀取數組

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: