numpy 學習總結
作者:csj
更新時間:01.09
email:59888745@qq.com
說明:因內容較多,會不斷更新 xxx學習總結;
回主目錄:2017 年學習記錄和總結
#生成陣列/使用astype/取值和賦值/ 數學運算 / 內建的建立陣列的函式/ 檔案輸入輸出
# Numpy是Python語言的一個library numpy
# Numpy主要支援矩陣操作和運算
# Numpy非常高效,core程式碼由C語言寫成
# pandas也是基於Numpy構建的一個library
# 現在比較流行的機器學習框架(例如Tensorflow/PyTorch等等),語法都與Numpy比較接近
import numpy as np
## 陣列簡介和陣列的構造(ndarray)
##生成陣列時可以指定資料型別,如果不指定numpy會自動匹配合適的型別
# np1 = np.array([1,2,3],datetype=np.float64)
#np1.datatype
##使用astype複製陣列並轉換資料型別
# np1 = np.array([1,2,3])
#np2=np1.astype(np.float64)
##使用astype將float轉換為int時小數部分被捨棄
# np1 = np.array([1.2,2.1,3.3])
#np2_int=np1.astype(np.int)
##Array indexing/陣列取值和賦值 在兩個維度上分別按照[:2]和[1:3]進行切片,取需要的部分
# a =np.array([[1,2,3],[4,5,6]])
# b =a[:2,1:3] #row,clo
# b
##用dtype來看numpy陣列中元素的型別:
#b.dtype
##陣列取值和賦值
# np1 = np.array([1,2,3])
# np1 = np.array([1,2,3],datetype=np.float64)
#np1.datatype
# np1.shape
# np1[0]
# np2=np.array([[1,2,3],[4,5,6]])
# np2
# np2[0,1]
##內建的建立陣列的函式
# np1 = np.zeros((3,3))
# np1
# np2 = np.ones((3,3))
# np2
# np3=np.full((3,3),0)
# np3
# np4=np.eye(3,3) # 對角矩陣(對角元素為1)
# np4
# np5=np.random.random((3,3)) # 3row,3 col矩陣
# np5
# np6=np.empty((2,3,3)) # 2 ge 3row,3 col矩陣
# np6
# np7=np.arange(15) #arrar 0--14
# np7
## 數學運算
#x = np.array([[1,2,3],[4,5,6]],dtype=np.int32)
#y = np.array([[1,1,1],[1,1,1]],dtype=np.int32)
# z =x+y
# z=np.add(x,y)
#z =x-y
# z=np.subtract(x,y)
# z
# z=x / y #np.divide(x,y)
# z
# z=x * y #np.multiply(x,y)
# z
# z=np.sqrt(x)
# z
# v=np.array([1,2])
# m=np.array([3,4])
# k= v.dot(m) #求向量內積np.dot(v,m)
# k
# v=np.array([1,2])
# m=np.array([3,4])
# k= v.dot(m) #矩陣的乘法
# k
##轉置和數學公式一樣,1維的vector轉置還是自己
# x.T
# arr = np.arange(16).reshape((2, 2, 4))
# [[[ 0 1 2 3]
# [ 4 5 6 7]]
# [[ 8 9 10 11]
# [12 13 14 15]]]
# print(arr.transpose((1,0,2)))
# [[[ 0 1 2 3]
# [ 8 9 10 11]]
# [[ 4 5 6 7]
# [12 13 14 15]]]
# print(arr.swapaxes(1,2))
# [[[ 0 4]
# [ 1 5]
# [ 2 6]
# [ 3 7]]
# [[ 8 12]
# [ 9 13]
# [10 14]
# [11 15]]]
#x = np.array([[1,2],[3,4]])
#print(np.sum(x)) # 陣列/矩陣中所有元素求和; prints "10"
#print(np.sum(x, axis=0)) # 按行去求和; prints "[4 6]"
#print(np.sum(x, axis=1)) # 按列去求和; prints "[3 7]"
## broadcasting 逐元素運算了
##給x的每一行都逐元素加上一個向量,然後生成y
## 邏輯運算
# x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
# y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
# cond = np.array([True, False, True, True, False])
print(np.where(cond, x_arr, y_arr)) # is true get x col,is false get x col value
## 陣列高階操作
##numpy可以很容易地把一維陣列轉成二維陣列,三維陣列。
# arr = np.arange(8)
# arr
# print("(4,2):", arr.reshape((4,2)))
# print("(2,2,2):", arr.reshape((2,2,2)))
## ar.ravel() #高維陣列可以用ravel來拉平一維陣列
##連線兩個二維陣列 np.concatenate
#np.concatenate([arr1, arr2], axis = 0)) # 按行連線
#np.concatenate([arr1, arr2], axis = 1)) # 按列連線
##拆分陣列
first, second, third = np.split(arr, [1,3], axis = 0) #按row 拆分
first, second, third = np.split(arr, [1,3], axis = 1) #按col 拆分
## r_ 用於按行堆疊 相當於row append()
np.r_[arr1, arr2]
## c_用於按列堆疊 相當於col append()
np.c_[np.r_[arr1, arr2], arr]
## 按元素重複
arr = np.arange(3)
print(arr.repeat(3))
print(arr.repeat([2,3,4]))
[0 0 0 1 1 1 2 2 2]
[0 0 1 1 1 2 2 2