import numpy as np
'''生成0-1之間符合條件的數組'''
#生成一個隨機浮點數
a1 = np.random.rand()
# print(a1)
#生成一個二維數組
a2 = np.random.rand(3,4)
# print(a2)
'''查看數組的維度、大小、數據類型'''
# print('數組的維度:',a2.ndim)
# print('數組的大小:',a2.shape)
# print('數組的數據類型:',a2.dtype)
'''生成指定元素區間的數組,並且可以指定大小'''
#前兩個參數代表數據的區間,第三個參數爲數組大小shape
a3 = np.random.uniform(2,3,(2,5))
# print(a3)
#生成隨機整型數組
a4 = np.random.randint(2,size=5)
# print(a4)
a5 = np.random.randint(2,size=(2,4))
# print(a5)
'''序列創建'''
a6 = np.array([2,4,5,3])
# print(a6)
a7 = np.array([[3,4],[7,2]],dtype='int32')
# print(a7)
'''創建全是0的額數組,但是shape必須指定,元組類型,如果是一個整型數字,代表是一個一維數組'''
#如果不指定類型,默認使用numpy.float64
a8 = np.zeros((4,4),dtype='int8')
# print(a8)
a9 = np.zeros((4,4))
# print(a9)
a10 = np.ones((4,4),dtype='int8')
# print(a10)
a11 = np.ones((4,4))
# print(a11)
'''按照範圍,順序生成'''
# arange (start, stop, step,dtype)
# np.arange(1,100,10) == np.array(range(1,100,10))
a12 = np.arange(1,100,10)
# print(a12)
a13 = np.array(range(1,100,10))
# print(a13)
'''重新調整維度'''
'''方法一'''
a14 = np.zeros((3,4))
# print(a14)
a15 = a14.reshape((2,2,3))
# print(a15)
# print(a15.ndim)
# print(a15.shape)
a16 = a14.reshape((2,6))
# print(a16)
'''方法二'''
# print(a16.T)
'''打亂順序'''
a17 = np.arange(1,100,10)
a18 = np.random.shuffle(a17)
# print(a17)
# print(a18)
#舒服之後,原來的數據做了打亂處理,慎重,在原有數組基礎上
'''numpy的數據類型'''
'''
名稱 描述
bool_ 布爾型數據類型(True 或者 False)
int_ 默認的整數類型(類似於 C 語言中的 long,int32 或 int64)
intc 與 C 的 int 類型一樣,一般是 int32 或 int 64
intp 用於索引的整數類型(類似於 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8 字節(-128 to 127)
int16 整數(-32768 to 32767)
int32 整數(-2147483648 to 2147483647)
int64 整數(-9223372036854775808 to 9223372036854775807)
uint8 無符號整數(0 to 255)
uint16 無符號整數(0 to 65535)
uint32 無符號整數(0 to 4294967295)
uint64 無符號整數(0 to 18446744073709551615)
float_ float64 類型的簡寫
float16 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_ complex128 類型的簡寫,即 128 位複數
complex64 複數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128 複數,表示雙 64 位浮點數(實數部分和虛數部分)
'''
'''astype更改數據類型,如果沒有設置copy,返回值爲一個新的數組'''
a19 = np.random.randint(1,12,(1,2),dtype='uint8')
# print(a19)
# print(a19.dtype)
a20 = a19.astype(np.float64)
# print(a20)
# print(a20.dtype)
'''數組運算'''
a21 = [[1,2,3,4],[1,2,3,4]]
a22 = [[5,2,3,4],[5,2,3,4]]
#列表相加
# print(a21+a22)
s1 = np.array(a21)
s2 = np.array(a22)
#數組乘以一個常數
s3 = s1*10
# print(s3)
#多維數組和多維數組相乘
# print(s1*s2)
#數組加法
# print(s1+s2)
'''
一維數組與一維數組:保證元素的個數必須相同
多維數組與多維數組:注意形狀,相同的維度大小和維度個數
一維數組與多維數組:注意一維數組的形狀問題
'''
'''一維數組的切片和索引'''
s4 = np.array([1,2,3])
# 索引類似列表,下標從0 開始
# print(s4[2])
#全部截取
# print(s4[:])
#從2位開始,截取到最後
# print(s4[1:])
#從開始截取到最後,步長爲2
# print(s4[::2])
'''多維數組的切片和取值'''
s5 = np.array([[1,2,3],[4,5,6],[7,8,9]])
# print(s5)
#取單值
#按照列表思想取值
# print(s5[1][1])
#按照數組思維取值
# print(s5[1,1])
#取多值
#以,爲界,前面的是列標,後面的是行標,注意,索引以0開始,並且類似左閉又開
# print(s5[0:2,1:3])
#截取所有一維數組的第2、3個
# print(s5[:,1:3])
#截取不連續的多行多列
# print(s5[::2,1:])
'''numpy 的計算函數'''
#向上取整數,並保持數據類型不改變
s6 = np.random.uniform(-5,10,(3,4))
s7 = np.ceil(s6)
# print(s6)
# print(s7)
#向下取整 np.floor()
#四捨五入 np.rint()
#平方 np.square()
#平方根 np.sqrt()
'''將數組分爲兩個部分,一個是小數部分,一個是整數部分'''
# print(s6)
# print(np.modf(s6)[0])
# print(np.modf(s6)[1])
'''判斷是否爲空值,判斷每一個元素'''
s8 = np.isnan(s6)
# print(s8)
'''條件篩選'''
s9 = np.array([ 0, -1, 2, -1, 4,-1, 6, -1, 8, -1]).reshape((2,5))
# print(s9)
#where的用法:迭代判斷數組的每一個元素是否符合條件判斷,如果符合,返回該元素,不符合,則返回默認值
s10 = np.where((s9%2==0),s9,9)
# print(s10)
'''zip的用法'''
#2 zip(o1,o2)把對應位置上的兩個對象壓縮成一個元組
# 將數組轉列表:s2.tolist()
s11 = np.array([1,3,2,4,9,8,7,-1,-2,-2]).reshape((2,5))
# print(s11)
s12 = np.array([1,2,-7,8,9,4,7,-1,3,-2]).reshape((2,5))
# print(s12)
#where
s13 = np.where(s11>s12,s11,s12)
# print(s13)
#zip
s11_list = s11.reshape(10,).tolist()
# print(s11_list)
s12_list = s12.reshape(10,).tolist()
# print(s12_list)
list3 = [x if x>y else y for x,y in zip(s11_list,s12_list)]
# print(list3)
# print(np.array(list3).reshape((2,5)))
'''使用uniform,生成10,40之間的數組,組成(3,4)數組,找出所有四捨五入之後,大於20 ,並且小於30的數字,修改成50,其他數字不變,組成新的數組'''
#(1)
s17 = np.random.uniform(10,40,(3,4)).round()
# print(s17)
s14 = np.where((s17>20)&(s17<30),50,s17)
# print(s14)
#(2)
s15 = np.random.uniform(10,40,(3,4))
# print(s15)
s16 = np.where((np.rint(s15)>20)&(np.rint(s15)<30),50,np.rint(s15))
# print(s16)
'''numpy的常用函數'''
'''
#裏面可以添加參數axis選擇行列的數據
求和: np.sum
求平均:np.mean
求最大值:np.max
求最小值:np.min
求方差:np.var
求標準差: np.std
求最大值的下標:np.argmax
'''
'''元素判斷'''
s20 = np.array([1,2,-7,8,9,4,7,-1,3,-2]).reshape((2,5))
# print(s20)
#如果可迭代對象中有一個符合條件就輸出True
# print(np.any(s20<5,axis=0))
#如果可迭代對象中全部符合條件就輸出True
# print(np.all(s20<5,axis=0))
'''數組的操作'''
# 追加一個元素,會對多維數組進行降維操作
# 一維數組追加單個元素,列表或者數組,返回的也是一維數組
# 多維數組也是一樣返回一維數組
d1 = np.arange(10,20)
d2 = d1.reshape((2,5))
# print(d1)
# print(d2)
#追加元素 ,如果是一維數組,不需要調用到axis這個參數
d3 = np.append(d1,20)
# print(d3)
# 多維數組的追加,降維成一維數組,將元素追加到末尾
d4 = np.append(d2,20)
# print(d4)
# 一維數組追加列表
d5 = np.append(d1,[20,21])
# print(d5)
# 一維數組和多維數組相追加,降維,加入到末尾
d6 = np.append(d2,d1)
d7 = np.append(d1,d2)
# print(d6)
# print(d7)
#insert的運用
d8 = np.insert(d1,0,100)
# print(d8)
d9 = np.insert(d1,0,100,axis=0)
# print(d9)
d10 = np.insert(d2,0,100)
# print(d10)
d11 = np.insert(d2,0,100,axis=0)
# print(d11)
#delete函數的使用問題
#一維數組
d12 = np.delete(d1,0,axis=0)
# print(d12)
d13 = np.delete(d1,[0,1],axis=0)
# print(d13)
#多維數組
d12 = np.delete(d2,0,axis=1)
# print(d12)
d13 = np.delete(d2,[0,1],axis=1)
# print(d13)
'''數組合並'''
f1 = np.arange(10,20)
f2 = np.arange(30,40)
# 二維數組
f3 = f1.reshape((2,5))
f4 = f2.reshape((2,5))
# print(f1)
# print(f2)
# print(f3)
# print(f4)
f5 = np.concatenate((f1,f2))
# print(f5)
f6 = np.concatenate((f3,f4))
# print(f6)
'''集合的問題'''
list01 = [1,1,1,1,2,3,4,5,12,12,13,7,8,9,9,9]
# print(list01)
# print(len(list01))
q1 = np.array(list01)
#一維數組去重
q2 = np.unique(q1)
# print(q2)
#多維數組去重,降維成一位數組去重
#求並集的情況
# 一維數組的並集,去重並且排序
# 多維數組求並集降維,去重並且排序
# np.union1d()
#求交集的情況
# np.intersect1d()
python之numpy的簡單使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.