numpy通用函式
基本操作
# 陣列形狀:.t/.reshape()/.resize()
import numpy as np
ar1 = np.arange(10)
ar2 = np.ones((5
,2))
print
(ar1,
'\n'
,ar1.t)
print
(ar2,
'\n'
,ar2.t)
print
('------'
)# t方法:轉置,例如原shape為(3,4)/(2,3,4),轉置結果為(4,3)/(4,3,2) → 所以一維陣列轉置後結果不變
ar3 = ar1.reshape(2,
5)# 用法1:直接將已有陣列改變形狀
ar4 = np.zeros((4
,6))
.reshape(3,
8)# 用法2:生成陣列後直接改變形狀
ar5 = np.reshape(np.arange(12)
,(3,
4))# 用法3:引數內新增陣列,目標形狀
print
(ar1,
'\n'
,ar3)
print
(ar4)
print
(ar5)
# numpy.reshape(a, newshape, order='c'):為陣列提供新形狀,而不更改其資料,所以元素數量需要一致!!
print
('------'
)ar6 = np.resize(np.arange(5)
,(3,
4))print
(ar6)
# numpy.resize(a, new_shape):返回具有指定形狀的新陣列,如有必要可重複填充所需數量的元素。
# 注意了:.t/.reshape()/.resize()都是生成新的陣列!!!
# 陣列的複製
ar1 = np.arange(10)
ar2 = ar1
print
(ar2 is ar1)
ar1[2]
=9print
(ar1,ar2)
# 回憶python的賦值邏輯:指向記憶體中生成的乙個值 → 這裡ar1和ar2指向同乙個值,所以ar1改變,ar2一起改變
ar3 = ar1.copy(
)print
(ar3 is ar1)
ar1[0]
=9print
(ar1,ar3)
# copy方法生成陣列及其資料的完整拷貝
# 陣列型別轉換:.astype()
ar1 = np.arange(
10,dtype=
float
)print
(ar1,ar1.dtype)
print
('-----'
)# 可以在引數位置設定陣列型別
ar2 = ar1.astype(np.int32)
print
(ar2,ar2.dtype)
print
(ar1,ar1.dtype)
# a.astype():轉換陣列型別
# 注意:養成好習慣,陣列型別用np.int32,而不是直接int32
# 陣列堆疊
# numpy.hstack(tup):水平(按列順序)堆疊陣列
a = np.arange(5)
# a為一維陣列,5個元素
b = np.arange(5,
9)# b為一維陣列,4個元素
ar1 = np.hstack(
(a,b)
)#hstack:橫向連線 # 注意:((a,b)),這裡形狀可以不一樣
print
(a,a.shape)
print
(b,b.shape)
print
(ar1,ar1.shape)
a = np.array([[
1],[
2],[
3]])
# a為二維陣列,3行1列
b = np.array([[
'a'],[
'b'],[
'c']])
# b為二維陣列,3行1列
ar2 = np.hstack(
(a,b)
)# 注意:((a,b)),這裡形狀必須一樣
print
(a,a.shape)
print
(b,b.shape)
print
(ar2,ar2.shape)
print
('-----'
)# numpy.hstack(tup):水平(按列順序)堆疊陣列
# numpy.vstack(tup):垂直(按列順序)堆疊陣列
a = np.arange(
5)
b = np.arange(5,
10)ar1 = np.vstack(
(a,b)
)print
(a,a.shape)
print
(b,b.shape)
print
(ar1,ar1.shape)
a = np.array([[
1],[
2],[
3]])
b = np.array([[
'a'],[
'b'],[
'c'],[
'd']
])
ar2 = np.vstack(
(a,b)
)# 這裡形狀可以不一樣
print
(a,a.shape)
print
(b,b.shape)
print
(ar2,ar2.shape)
print
('-----'
)# numpy.vstack(tup):垂直(按列順序)堆疊陣列
a = np.arange(
5)
b = np.arange(5,
10)ar1 = np.stack(
(a,b),axis =0)
#axis:預設為0
ar2 = np.stack(
(a,b)
,axis =1)
print
(a,a.shape)
print
(b,b.shape)
print
(ar1,ar1.shape)
print
(ar2,ar2.shape)
# numpy.stack(arrays, axis=0):沿著新軸連線陣列的序列,形狀必須一樣!
# 重點解釋axis引數的意思,假設兩個陣列[1 2 3]和[4 5 6],shape均為(3,0)
# axis=0:[[1 2 3] [4 5 6]],shape為(2,3)
# axis=1:[[1 4] [2 5] [3 6]],shape為(3,2)
# 陣列拆分
ar = np.arange(16)
.reshape(4,
4)ar1 = np.hsplit(ar,2)
print
(ar)
print
(ar1,
type
(ar1)
)# numpy.hsplit(ary, indices_or_sections):將陣列水平(逐列)拆分為多個子陣列 → 按列拆分
# 輸出結果為列表,列表中元素為陣列
ar2 = np.vsplit(ar,4)
##將陣列垂直(行方向)拆分為多個子陣列 → 按行拆 這裡的4,表示4行,一排乙個array
print
('vsplit:'
,ar2,
type
(ar2)
)# numpy.vsplit(ary, indices_or_sections)::將陣列垂直(行方向)拆分為多個子陣列 → 按行拆
# 陣列簡單運算
ar = np.arange(6)
.reshape(2,
3)print
(ar +10)
# 加法
print
(ar *2)
# 乘法
print(1
/(ar+1)
)# 除法
print
(ar **
0.5)
# 冪# 與標量的運算
print
(ar.mean())
# 求平均值
print
(ar.
max())
# 求最大值
print
(ar.
min())
# 求最小值
print
(ar.std())
# 求標準差
print
(ar.var())
# 求方差
print
(ar.
sum(
), np.
sum(ar,axis =0)
)# 求和,np.sum() → axis為0,按列求和;axis為1,按行求和
print
(np.sort(np.array([1
,4,3
,2,5
,6])
))# 排序
# 常用函式
NumPy 學習筆記(二)
陣列索引 1 ndarray物件的內容可以通過索引或切片來訪問和修改,與 python 中 list 的切片操作一樣 由於陣列可能是多維的,所以必須為陣列的每個維度指定乙個切片,使用切片時返回的是乙個子陣列 2 整數索引 獲取相應下標的元素的值 3 布林陣列索引 布林索引通過布林運算來獲取符合指定條...
OPENCV學習筆記二 numpy用法
numpy numerical python 是 python 語言的乙個擴充套件程式庫,支援大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。而本質上是乙個個畫素點疊加,一整張就像乙個陣列一樣,所以numpy的使用對於opencv的學習來說必不可少 本文資料主要來自於菜鳥教程 這張...
Numpy學習筆記
測試檔案裡的資料排列型別最好是有規律的,不可以隨便,否則將發生一些錯誤 genfromtxt函式 genfromtxt函式建立陣列 資料 genfromtxt主要執行兩個迴圈運算。第乙個迴圈將檔案的每一行轉換成字串序列。第二個迴圈將每個字串序列轉換為相應的資料型別。genfromtxt能夠考慮缺失的...