說明
from(來自) 那個檔名 import(匯入) 類或者函數
例子
from cat import Cat,people #從cat檔案匯入Cat和people類或者函數
from cat import * #從cat檔案匯入所有類
import cat #匯入這個檔案
實際應用
from random import choice #獲取random的choice方法
程式碼
a='ni hao';
a.title();
效果
'Python Abc'
程式碼
a='Wi Wao';
a.upper();
a.lower();
效果
'WI WAO'
'wi wao'
程式碼
a=' Python abc ';
a.strip(); #兩頭都刪除空格
a.rstrip(); #刪除後面空格
a.lstrip(); #刪除前面空格
效果
'Python abc'
' Python abc'
'Python abc '
是一個類似陣列的容器,但是存東西的能力強大,存取方式通過索引的方式
程式碼
a=[' Python ','c++','java'];
a[0];
a[-1];
a[-2]; #逆序索引也是可以的呀
a[0].strip();
效果
' Python '
'java'
'c++'
'Python'
程式碼
a=[' Python ','c++','java'];
a[0]='c#';
a;
效果
['c#', 'c++', 'java'];
a=[' Python ','c++','java'];
a.append('php');
a;
效果
['Python', 'c++', 'java','php']
a=[' Python ','c++','java'];
a.insert(1,'php'); #注意插入的位置就是就是它最後所在位置
a;
效果
['Python', 'php', 'c++','java']
del 可以刪除變數或者元素,注意:del a直接把列表刪除了。
程式碼
a=[' Python ','c++','java'];
del a[1];
a;
效果
['Python','java']
程式碼
a=[' Python ','c++','java','C#','php','html'];
a.pop(); #預設最後一個
a.pop(0);
a.pop(-1);
a;
效果
['c++','java','c#']
注意:只能刪除一個,多個就回圈
程式碼
a=[' Python ','html','html','C#','php','html'];
a.remove('html');
a.remove('html');
a
效果
[' Python ',C#','php','html']
注意:按照字母表排序,而且是根本性改變元組順序
程式碼
a=[' Python ','html','html','C#','php','html'];
a.sort();
a;
效果
[' Python ', 'C#', 'html', 'html', 'html', 'php']
程式碼
a=[' Python ','html','html','C#','php','html'];
a.reverse();
a;
效果
['html', 'php', 'C#', 'html', 'html', ' Python ']
程式碼
a=[' Python ','html','html','C#','php','html'];
a.len();
a;
效果
6
程式碼
a=[' Python ','html','html','C#','php','html'];
for _ in a:
print(_);
效果
Python
html
html
C#
php
html
程式碼
for _ in range(1,10,2):
print(_);
效果
1
3
5
7
9
程式碼
a=list(range(5));
a;
效果
[0, 1, 2, 3, 4]
程式碼
a=[];
for i in range(1,30,2):
a.append(i**2);
a;
效果
[1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841]
程式碼
a=[0, 1, 2, 3, 4, 1, 16, 49, 100, 169, 256, 361, 484, 625, 784];
min(a);
max(a);
sum(a);
效果
0
784
2855
程式碼
a=[t**2 for t in range(10) if t%2==1];
a;
效果
[1, 9, 25, 49, 81]
程式碼
a=[0, 1, 2, 3, 4, 1, 16, 49, 100, 169, 256, 361, 484, 625, 784]
a[1:4];
a[4:]; #到末尾
a[:5]; #重開頭開始
a[-3:]; #後3位
a[-3:-1] #不包括-1
效果
[1, 2, 3]
[4, 1, 16, 49, 100, 169, 256, 361, 484, 625, 784]
[0, 1, 2, 3, 4]
[484, 625, 784]
[484, 625]
元組既是不可變得列表
程式碼
a=(' Python ','c++','java');
a[0];
a[-1];
a[-2]; #逆序索引也是可以的呀
a[0]=123; #修改是不被允許的
效果
' Python '
'java'
'c++'
'Python'
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
a[0]='123'
TypeError: 'tuple' object does not support item assignment
非數位索引關係,屬於鍵值對應關係
程式碼
a={'a':'python','b':'c++'};
a['a']
效果
'python'
動態結構,隨時新增
程式碼
a={'a':'python','b':'c++'};
a['c']='java';
a;
效果
{'a': 'python', 'b': 'c++', 'c': 'java'}
程式碼
a={'a': 'python', 'b': 'c++', 'c': 'java'};
a['c']='c#';
a;
效果
{'a': 'python', 'b': 'c++', 'c': 'c#'}
程式碼
a={'a':'python','b':'c++','c': 'java'};
del a['c'];
a;
效果
{'a': 'python', 'b': 'c++'}
注意:items()的結果,也可以用這種方式定義字典
程式碼
a={'a':'python','b':'c++','c': 'java','d':'C#'};
a.items()
a;
效果
dict_items([('a', 'python'), ('b', 'c++'), ('c', 'java'), ('d', 'C#')])
程式碼
dict([('a', 'python'), ('b', 'c++'), ('c', 'java'), ('d', 'C#')]);
效果
{'a': 'python', 'b': 'c++', 'c': 'java', 'd': 'C#'}
程式碼
a={'a':'python','b':'c++','c': 'java','d':'C#'};
for i,j in a.items():
print(i+'\t')
print(j+'\n')
效果
a
python
b
c++
c
java
d
C#
程式碼
a={'a':'python','b':'c++','c': 'java','d':'C#'};
for i in a.keys():
print(i)
效果
a
b
c
d
注意:這裏使用了set(),集合是沒有順序的,值也是唯一的
程式碼
a={'a':'python','b':'c++','c': 'java','d':'c++'};
for i in set(a.values()):
print(i)
效果
c++
java
python
程式碼
result=[];
for i in range(5):
a={'a':'1','b':'2','c':'3'}
result.append(a)
result;
效果
[{'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}, {'a': '1', 'b': '2', 'c': '3'}]
程式碼
f_l={'a': ['python', 'c++'], 'b': ['c', 'c++', 'python'], 'c': ['java']};
for i,j in f_l.items():
for k in j:
print(i+' like '+k)
print('\n')
效果
a like python
a like c++
b like c
b like c++
b like python
c like java
程式碼
user={
'a':{
'name':'aa',
'ad':'hu',
'tel':'123'
},
'b':{
'name':'bb',
'ad':'sd',
'tel':'32'
}
}
for i,j in user.items():
print('user '+i);
for a,b in j.items():
print('his '+a+' is '+b);
效果
user a
his name is aa
his ad is hu
his tel is 123
user b
his name is bb
his ad is sd
his tel is 32
顧名思義,類就是一類的集合體,包含屬性和方法
程式碼
class dog():
#self指的內部使用的變數
def __init__(self,name='papi',age=4):
self.n=name
self.a=age
def talk(self):
print('wo wo my name is '+self.n)
print('my age is',self.a)
def active(self):
print('打滾')
dog1 = dog()
dog1.talk()
dog1.active()
print('\n')
dog2 = dog('a',2)
dog2.talk()
dog2.active()
效果
wo wo my name is papi
my age is 4
打滾
wo wo my name is a
my age is 2
打滾
想要修改內部屬性的值,可以範例化後呼叫修改,或者寫內建方法修改
程式碼
class dog():
#self指的內部使用的變數
def __init__(self,name='papi',age=4):
self.n=name
#注意內部屬性是可以在範例化後呼叫的
self.a=age
def talk(self):
print('wo wo my name is '+self.n)
print('my age is',self.a)
def active(self):
print('打滾')
dog1 = dog()
print(dog1.n)
效果
papi
就是你爹有啥你也有啥,而且你比你爹更優秀
程式碼
class dog():
def __init__(self,name='papi',age=4):
self.name=name
self.age=age
def got_name(self):
print('myname')
def talk(self):
print('wo wo my name is '+self.n)
print('my age is',self.a)
def active(self):
print('打滾')
class white_dog(dog):
#看這裏的繼承方法
def __init__(self,name,age):
super().__init__(name,age)
#新增特有屬性
self.abc=10
#重寫父類別方法
def got_name(self):
print('myname '+self.name)
def got_year(self):
print('myyear '+self.year)
#定義新方法
def got_ismao(self):
print('子類屬性')
test=white_dog('kk',12);
print(test.abc)
test.got_name()
test.got_ismao()
效果
10
myname kk
子類屬性
程式碼
class people():
def __init__(self,name,age):
self.name=name
self.age=age
def get_name(self):
print('myname'+'is'+self.name)
def get_age(self):
print('myage'+'is'+self.age)
class women(people):
def __init__(self,name,age,sex):
super().__init__(name,age)
self.sex=sex
def get_sex(self):
print('mysex'+'is'+self.sex)
A=women('lili',13,'women')
A.get_name()
A.get_sex()
A.get_sex()
print(A.name,A.age,A.sex)
效果
mynameislili
mysexiswomen
mysexiswomen
lili 13 women
程式碼
class dog():
def __init__(self,name='papi',age=4):
self.name=name
self.age=age
def got_name(self):
print('myname')
def talk(self):
print('wo wo my name is '+self.n)
print('my age is',self.a)
def active(self):
print('打滾')
class body():
def __init__(self,foot=4,head=1):
self.foot=foot
self.head=head
def get_foot(self):
print('foot'+str(self.foot))
class white_dog(dog):
#看這裏的繼承方法
def __init__(self,name,age):
super().__init__(name,age)
#範例化類做參數
self.foot=body()
def abc(self):
print('11');
test=white_dog('kk',12);
#注意這裏的呼叫
test.foot.get_foot()
效果
foot4
話說python中本來就有列表,爲什麼還要用numpy的呢!因爲numpy中的陣列能運用向量化運算處理整個陣列,而自帶的list只能用回圈運算。
程式碼
a=np.array([1,2,3,4]);
b=np.array((1,2,3,4));
print(a);
print(b)
a;
b;
c=np.array([[1,2,3],[2,3,4]])
print(c)
效果
[1,2,3,4]
[1,2,3,4]
array([1, 2, 3, 4])
array([1, 2, 3, 4])
[[12 3 4]
[ 1 2 3]]
程式碼
a=np.arange(5)
print(a)
a
c=np.array([np.arange(5),np.arange(5)])
效果
[0,1,2,3,4]
array([0,1,2,3,4])
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
矩陣數預設爲1,必須符合矩陣*行*列
程式碼
c=np.arange(12).reshape(3,4);
c;
d=np.arange(24).reshape(3,4,2);
d;
效果
#3行4列
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
#3塊矩陣都是4行2列
array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11],
[12, 13],
[14, 15]],
[[16, 17],
[18, 19],
[20, 21],
[22, 23]]])
程式碼
np.bool(1)
np.int8()
np.int16()
np.int32()
np.int64()
np.uint8()
np.uint16()
np.uint32()
np.uint64()
np.float16()
np.float32()
np.float64()
#複數,只能用j
complex64(3+5j)
complex128(3+4j)
效果
True
#·····
3+5j
3+4j
複數型別用的'D':np.arange(4, dtype='D')
程式碼
#注意顯示的都是小數
a=np.arange(4,dtype=float);
a;
效果
array([1.,2.,3.,4.])
程式碼
a=np.array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11],
[12, 13],
[14, 15]],
[[16, 17],
[18, 19],
[20, 21],
[22, 23]]]);
#維度
a.ndim
#尺度
a.shape
#元素數量
a.size
效果
3
(3,4,2)
24
程式碼
a=np.arange(24).reshape(4,6);
a.T;
a
效果
array([[ 0, 6, 12, 18],
[ 1, 7, 13, 19],
[ 2, 8, 14, 20],
[ 3, 9, 15, 21],
[ 4, 10, 16, 22],
[ 5, 11, 17, 23]])
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
程式碼
d=np.array([1+2j,3+5j])
d.real
d.imag
效果
array([1.,3.])
array([2.,5.])
注意1:與matlab的不同在於,matlab使用的是()號
注意2:matlab的冒號表達式是[開始,步長,結束]
注意3:python的冒號表達式是[開始,結束,步長]
程式碼
a=np.arange(12).reshape(3,4);
a[0,0];
a[[0,1],[0,1]]
a[1:3,1:3]
效果
0
array([0,5])
array([[5,6],
[9,10]])
注意:reshape的效果和resize的效果基本一樣,而reshape不會改變原來矩陣,而resize會改變
程式碼
a=np.arange(12).reshape(3,4)
a
a.reshape(4,3)
a #沒有真的改變
a.resize(4,3)
a #真的改變了
效果
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
效果相同的把多維矩陣轉換成一維矩陣,不同的是flatten返回的拷貝改變不影響原來矩陣,而ravel返回的是檢視,改變它的值,就會改變原來的矩陣的值
程式碼
a=np.arange(12).reshape(3,4)
a.ravel();
a.flatten();
a.ravel()[2]=100;
a.flatten()[3]=100;
a;
效果
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
#迫使值改變的是ravel()
array([[ 0, 1, 100, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
水平疊加(海平面)指的是同一水平方向新增,故行要一樣,也叫列新增。
垂直疊加(疊樓)指的是同一垂直方向疊加,故列要一樣,也叫行新增
hstack()等價於column_stack()
vstack()等價於row_stack()
程式碼
a=np.arange(3)
b=np.arange(7,10)
c=np.hstack((a,b))
c
效果
array([0,1,2,7,8,9])
程式碼
a=np.arange(10)
b=np.arange(0,20,2)
c=np.vstack((a,b))
c
效果
array([
[0,1,2,3,4,5,6,7,8,9],
[0,2,4,6,8,10,12,14,16,18]
])
np.hsplit(a,2)==np.split(a,2,axis=1)水平或者說橫向拆分.
np.vsplit(a,2)==np.split(a,2,axis=0)垂直或者說縱向拆分.
注意:特別說明只能對等劃分矩陣如果劃分後不對等就會報錯
程式碼
a=np.arange(30).reshape(5,6)
np.hsplit(a,2) #注意如果是np.hsplit(a,1)報錯
a=np.vstack((a,np.array([1,2,3,4,5,6]))) #拼一維
a
np.vsplit(a,2)
效果
[array([[ 0, 1, 2],
[ 6, 7, 8],
[12, 13, 14],
[18, 19, 20],
[24, 25, 26]]), array([[ 3, 4, 5],
[ 9, 10, 11],
[15, 16, 17],
[21, 22, 23],
[27, 28, 29]])]
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[ 1, 2, 3, 4, 5, 6]])
[array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[ 1, 2, 3, 4, 5, 6]])]
羅列一些常用的函數,注意想算某一行或者某一列用axis指明方向,否則就是全矩陣
程式碼
a=array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[ 1, 2, 3, 4, 5, 6]])
np.sum(a) #和
np.max(a) #最大值
np.min(a) #最小值
np.sum(a,axis=1) #和
np.max(a,axis=1) #最大值
np.min(a,axis=1) #最小值
np.sum(a,axis=0) #和
np.max(a,axis=0) #最大值
np.min(a,axis=0) #最小值
效果
456
29
0
array([ 15, 51, 87, 123, 159, 21])
array([ 5, 11, 17, 23, 29, 6])
array([ 0, 6, 12, 18, 24, 1])
array([61, 67, 73, 79, 85, 91])
array([24, 25, 26, 27, 28, 29])
array([0, 1, 2, 3, 4, 5])
同樣可以沿座標軸走
程式碼
a=array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[ 1, 2, 3, 4, 5, 6]])
np.ptp(a) #沿着指定方向返回max-min
np.ptp(a,axis=1)
np.ptp(a,axis=0)
np.std(a) #標準差
np.var(a) #方差
np.cumsum(a) #累加
np.cumsum(a,axis=1)
np.cumprod(a,axis=1) #累乘
效果
29
array([5, 5, 5, 5, 5, 5])
array([24, 24, 24, 24, 24, 24])
8.928730157319249
79.72222222222223
array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,
91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325,
351, 378, 406, 435, 436, 438, 441, 445, 450, 456], dtype=int32)
array([[ 0, 1, 3, 6, 10, 15],
[ 6, 13, 21, 30, 40, 51],
[ 12, 25, 39, 54, 70, 87],
[ 18, 37, 57, 78, 100, 123],
[ 24, 49, 75, 102, 130, 159],
[ 1, 3, 6, 10, 15, 21]], dtype=int32)
array([[ 0, 0, 0, 0, 0, 0],
[ 6, 42, 336, 3024, 30240, 332640],
[ 12, 156, 2184, 32760, 524160, 8910720],
[ 18, 342, 6840, 143640, 3160080, 72681840],
[ 24, 600, 15600, 421200, 11793600, 342014400],
[ 1, 2, 6, 24, 120, 720]],
dtype=int32)
給定維度後,隨機生成[0,1)的亂數
程式碼
np.random.rand(3,4,2) #生成3維的4行2列亂數矩陣
效果
array([[[0.78222892, 0.57296174],
[0.82410043, 0.69199821],
[0.56177283, 0.54485045],
[0.72164954, 0.37793375]],
[[0.01029695, 0.23724886],
[0.99434156, 0.82188593],
[0.85203848, 0.77888204],
[0.01309593, 0.12506261]],
[[0.89450448, 0.16712764],
[0.26529951, 0.16106691],
[0.40513186, 0.04519616],
[0.49341251, 0.64960708]]])
與numpy.random.rand()同樣,但是產生的是正態分佈
程式碼
np.random.randn(3,4,2)
效果
array([[[-0.44832638, 0.01445034],
[-1.11713683, 0.12883422],
[-1.09305912, -0.33353701],
[ 0.1926343 , 0.75415553]],
[[ 1.64102921, -1.69070963],
[-0.07311009, 0.55925768],
[ 0.51650303, 0.92720525],
[-1.88607029, -0.51923897]],
[[-0.44430174, 0.09728218],
[-0.48600794, 0.29144825],
[-0.13591176, -1.0953001 ],
[ 0.10504994, -0.11815044]]])
size是維度大小,hige沒寫預設從0開始到low結束
size=5就是一維,size=(3,2)就是二維
程式碼
np.random.randint(1,10,size=(3,4))
np.random.randint(3,size=3) #從0到3產生數位,產生3個
效果
array([[8, 9, 8, 2],
[9, 9, 2, 5],
[6, 9, 3, 1]])
array([1, 0, 0])
numpy.random.random_sample(size=None)
numpy.random.random(size=None)
numpy.random.ranf(size=None)
numpy.random.sample(size=None)
程式碼
np.random.sample(size=(3,2))
效果
array([[0.07071135, 0.20996922],
[0.18568128, 0.1489589 ],
[0.17019674, 0.11112179]])
numpy.random.choice(a,size=None,replace=True,p=None)
a是數據,假如a是一個正數就是從0到這個正數選,要是一個列表就從列表選
size是選擇生成的數據矩陣
replace=False就是選的數都不重複的意思
p是概率,保證和爲1,且長度與選擇列表長度一致
程式碼
np.random.choice(5,size=3) #5就是np.arange(5)生成的列表
np.random.choice([3,4,2],size=(3,3)) #從列表選
np.random.choice([3,4,2],size=3,replace=False) #每個都不重複
np.random.choice([12,2,3],size=(3,3),p=[0.9,0.05,0.05])
#這p就和列表長度保持爲3,而且大概率都是12
效果
array([3, 1, 2])
array([[4, 4, 4],
[3, 4, 3],
[2, 4, 4]])
array([3, 2, 4])
array([[12, 12, 12],
[12, 12, 12],
[12, 2, 2]])
設定隨機種子,注意相同的隨機種子,產生的亂數是一樣的
程式碼
np.random.seed(10)
np.random.randn(5)
np.random.seed(100)
np.random.randn(5)
np.random.seed(100)
np.random.randn(5)
np.random.randn(5)
效果
array([ 1.3315865 , 0.71527897, -1.54540029, -0.00838385, 0.62133597])
array([-1.74976547, 0.3426804 , 1.1530358 , -0.25243604, 0.98132079])
array([-1.74976547, 0.3426804 , 1.1530358 , -0.25243604, 0.98132079])
array([ 0.51421884, 0.22117967, -1.07004333, -0.18949583, 0.25500144])
Series建立一個帶有序號的列表,其中的參數index可以改變序號
程式碼
a=pd.Series([1,2,3,4]); #不寫index就是數位排序
a;
b=pd.Series([1,2,3,4],index=['c','d','s','d'])
b;
b['s']; #類似字典索引
b[['c','s']]
效果
0 1
1 2
2 3
3 4
dtype: int64
c 1
d 2
s 3
d 4
dtype: int64
3
c 1
s 3
dtype: int64
…to be continue