Numpy學習筆記 二

2021-10-07 11:18:39 字數 4870 閱讀 5252

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能夠考慮缺失的...