#NumPy數據庫學習
#Numpy包含一下特點:
'''
1.強大的N維數組對象。
2.成熟的函數庫。
3.用於集成c/c++和Fortran代碼工具
4.實用的線性代數,傅里葉變換和隨機生成函數。
'''
import numpy as np
#4.1:屬性
array = np.array([[1,2,3],[4,5,6]])#將列表轉換爲矩陣,並轉換爲int類型
print(array)
print('array of dim is',array.ndim)#矩陣的維度
print('array of shape is',array.shape)#矩陣的行數和列數
print('array of size is',array.size)#矩陣元素個數
#4.2 :numpy:numpy創建Array
1,array:創建數組
2,dtype:指定數據類型
3,zeros:創建數據全爲零
4,ones:創建數據全爲一
5,empty:創建數據接近零
6,arange:指定範圍內創建數據
7,linspace:創建線段
#創建數組
a = np.array([1,2,3])
print(a)
#指定數據dtype
a = np.array([1,2,3],dtype=np.int)#指定爲int形
print(a.dtype)
b = np.array([1,2,3,4],dtype=np.float)#指定爲浮點型
print(b.dtype)
#創建特定數據
a = np.array([[1,2,3],[4,5,6]])#創建特定數據
print(a)
#創建全0數組
a = np.zeros((2,3))#全0兩行三列
print(a)
#創建全1數組,指定特定類型int
a = np.ones((2,3),dtype=np.int)
print(a)
#創建全空數組 每個數值接近0
a = np.empty([2,3])
print(a)
#array創建連續數組
a = np.arange(1,10,3)#1到10,步長爲3
print(a)
#reshape改變數據形狀
a = np.arange(6).reshape(2,3)
print(a)
#用linespace創建線段型數據
a = np.linspace(1,10,20)#1開始,10結束,創建10個數據
print(a)
#4.3 NumPy基礎運算
#基礎運算只加減乘除
a = np.array([10,20,30,40])
b = np.arange(4)
print(b)
c = a+b#加法運算
print(c)
d = a-b
print(d)#減法運算
e = 10*np.sin(a)#三角函數運算
print(e)
print(b<3)#邏輯判斷
f = np.random.random([2,3])#隨機生成兩行三列的舉證
print(f)
g = np.sum(b)#函數求和
print(g)
h = np.max(b)#求元素最大值最小值
i = np.min(b)
print(h)
print(i)
#多維數矩陣運算
a = np.array([[1,2],[3,4]])
print(a)
b = np.arange(4).reshape(2,2)
print(b)
c = a.dot(b)#c = dot(a,b) 矩陣相乘相乘計算
print(c)
#對行或列進行查找運算
a = np.array([[1,2],[3,4]])
print(np.max(a,axis=0))#按行求和最大值
print(np.max(a,axis=1))#按列求和最大值
print(np.min(a,axis=0))
print(np.min(a,axis=1))
#矩陣索引操作
a = np.arange(2,14).reshape(3,4)
print(a)
print(np.argmax(a))#矩陣中最大元素的索引
print(np.argmin(a))#矩陣中最小元素的索引
print(np.mean(a))#求解矩陣均值
print(np.average(a))
print(np.cumsum(a))#矩陣累加函數
print(np.diff(a))#矩陣累差函數
print(np.nonzero(a))#將非0元素的行與列座標分割開來
#矩陣的排序轉置替換
a = np.arange(14,2,-1).reshape(3,4)
print(a)
print(np.sort(a))#排序
print(np.transpose(a))#轉置
print(np.clip(a,5,9))#判斷當前矩陣元素是否比最小值小或比最大值大,若是則替換
#一維索引
a = np.arange(0,12)
print(a)
print(a[1])
b = np.arange(0,12).reshape(3,4)
print(b)
print(b[1])#第二行
#二維索引
a = np.arange(0,12).reshape(3,4)
print(a)
print(a[1,1])
print(a[1,1:3])#切片處理
for row in a:
print(row)
for col in a:
print(col)
for item in a.flat:
print(item)
#array置array合併
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b)))#上下合併
print(np.hstack((a,b)))#左右合併
#增加維度
a = np.array([1,1,1])
print(a.shape)
print(a[np.newaxis,:])
print(a[np.newaxis].shape)#newaxis增加維度
print(a[:,np.newaxis])
print(a[:,np.newaxis].shape)
#多矩陣合併
a = np.array([1,1,1])[:,np.newaxis]
b = np.array([2,2,2])[:,np.newaxis]
print(np.concatenate((a,b,b,a),axis=0))#表示上下合併
print(np.concatenate((a,b,b,a),axis=1))
#矩陣分割
a = np.arange(0,12).reshape(3,4)
print(a)
print(np.split(a,3,axis=0))#橫向分割三部分np.vsplit(a,3)
print(np.split(a,2,axis=1))#豎向分割三部分
print(np.array_split(a,3,axis=1))#不等量分割三部分
#copy 與 deep copy
= 具有關聯性
a = np.arange(4)
b = a
c = a
d = b
print(b is a)
d[0] = 5
print(a)
#copy賦值方法沒有關聯性