numpy經常使用總結

#導入算法

直接將文本load成numpy.ndarray,若是類型不是默認類型(dtype=float)會致使部分數據nan,skip_footer  
world_alcohol = numpy.genfromtxt("world.txt", 
									delimiter=",",  			    #以「,」爲列的分隔符
									skip_header=1,				  #跳過第一行
									usecols=(0, -1),			    #只讀取的列
									dtype="U75",					#設定類型
									names="A, B, C",				#設定列名
									missing_values={0:"N/A", 'b':" ", 2:"???"},  #某列缺失值定義
									filling_values={0:0, 'b':0, 2:-999}		  #某列缺失值替換
									)

#初始化數組

vector = numpy.array([5, 10, 15, 20])  
matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
np.zeros ((3,4))  
np.ones( (2,3,4), dtype=np.int32 )  
np.arange( 0, 2, 0.3 )		 #0-2,以0.3爲步長  
np.random.random((2,3))		#2行3列的0-1 array  
from numpy import pi  
np.linspace( 0, 2*pi, 100 )	#設置100個點  
z = np.linspace(0,10,11,endpoint=True,retstep=True)  #生成0~10之間均勻分佈的11個數,包括0和10  
help(np.linspace)
a=[1,2,3] np.diag(a) 是生成1,2,3 爲對角線的方陣

#經常使用方法屬性dom

查看維度:vector.shape 查看類型:vector.dtype 更改類型:vector = vector.astype(float)  
type(d) 和 d.dtype 一個返回的是d 的數據類型 nd.array 另外一個返回的是數組中內容的數據類型 
類型NumPy array必須全部數據是相同類型  
a.ndim #查看維度座標的數量,axes (dimensions)的數量  
a.dtype.name  
a.size#總數

#索引函數

vector[1,4]第一行第四列的值,從0開始.vector[0:3]是0-2的數列  
matrix[:,1],全部行的第2列,matrix[:,0:2],全部行的1,2列  
matrix = numpy.array([
[5, 10, 15],  
[20, 25, 30],  
[35, 40, 45]  
])  
matrix[1:3,1:3]
[[20 25]

  [35 40]]ui

#比較編碼

vector = numpy.array([5, 10, 15, 20])  
vector == 10 -> array([False,  True, False, False], dtype=bool) 比較每個元素  
經過比較的bool結果索引  
vector = numpy.array([5, 10, 15, 20])  
equal_to_ten = (vector == 10)  
print equal_to_ten -> [False  True False False]  
print(vector[equal_to_ten]) -> [10]
matrix = numpy.array([  
[5, 10, 15],  
[20, 25, 30],  
[35, 40, 45]  
])  
second_column_25 = (matrix[:,1] == 25)  
print second_column_25 -> [False  True False]  
print(matrix[second_column_25, :]) -> [[20 25 30]]  
equal_to_ten_and_five = (vector == 10) & (vector == 5) #進行與或非操做

vector = numpy.array([5, 10, 15, 20])  
equal_to_ten_or_five = (vector == 10) | (vector == 5)  
vector[equal_to_ten_or_five] = 50  
print(vector) -> [50 50 15 20]
matrix = numpy.array([  
[5, 10, 15],  
[20, 25, 30],  
[35, 40, 45]  
])  
second_column_25 = matrix[:,1] == 25  
print second_column_25 -> [False  True False]  
matrix[second_column_25, 1] = 10  
print matrix -> 中間25->10

#運算spa

vector = numpy.array([5, 10, 15, 20])  
求和:vector.sum()
求平均:vector.mean()  
numpy.exp():返回e的冪次方  
matrix.sum(axis=1) # 1是按行相加,0是按列相加  
is_value_empty = numpy.isnan(world_alcohol[:,4]) #判斷是否是nan,各個位置是bool值
z = np.zeros((5,5))  
z += np.arange(5)  
print np.arange(5) -> [0 1 2 3 4]  
print z  
[[0. 1. 2. 3. 4.]  
 [0. 1. 2. 3. 4.]  
 [0. 1. 2. 3. 4.]  
 [0. 1. 2. 3. 4.]  
 [0. 1. 2. 3. 4.]]
 a1=mat([1,1]);
a2=mat([2,2]);
a3=multiply(a1,a2)

np.array的+/-/平方**2/開方np.sqrt(A)都是對應元素操做,<>也是對應元素,返回對應的bool值  
兩種點乘操做:A.dot(B) np.dot(A, B)  
A.T #轉置
np.floor()#各個元素向下取整

#變形code

a = np.arange(15).reshape(3, 5)#更改形狀  
reshape:有返回值,所謂有返回值,即不對原始多維數組進行修改;  
resize:無返回值,所謂有返回值,即會對原始多維數組進行修改;

將多維數組降位一維:  
numpy.ravel()   #返回的是視圖(view,也很有幾分C/C++引用reference的意味),會影響原始矩陣  
numpy.flatten() #返回一份拷貝,對拷貝所作的修改不會影響(reflects)原始矩陣

#拼接對象

np.hstack((a,b))#列相拼接,多了列,行數不變  
np.vstack((a,b))#行拼接,多了行,列數不變  
np.vsplit(a,3)#將a從行切出3個array  
b = a  #是一個對象 相等 變化牽連  
c = a.view() #建立一個新對象 不相等 變化不牽連  
d = a.copy() #徹底複製一個對象 不相等 變化不牽連  
ind = data.argmax(axis=0)  np.argmax(data,axis=0) #array每行上最大數的索引下標  
(3,)#一維數組 (1,3)#二維  
import numpy as np  
data = np.sin(np.arange(20)).reshape(5,4)  
print data  
[[ 0.          0.84147098  0.90929743  0.14112001]  
 [-0.7568025  -0.95892427 -0.2794155   0.6569866 ]  
 [ 0.98935825  0.41211849 -0.54402111 -0.99999021]  
 [-0.53657292  0.42016704  0.99060736  0.65028784]  
 [-0.28790332 -0.96139749 -0.75098725  0.14987721]]  
ind = data.argmax(axis=0)  
print ind  - > [2 0 3 1]  
data_max = data[ind, xrange(data.shape[1])]  
print data_max   ->[0.98935825 0.84147098 0.99060736 0.6569866 ]  
all(data_max == data.max(axis=0))   -> True

#numpy.tile(A,reps)排序

numpy.tile(A,reps) #tile共有2個參數,A指待輸入數組,reps則決定A重複的次數。整個函數用於重複數組A來構建新的數組。  
numpy.tile([1,2,3],2) -> array([1, 2, 3, 1, 2, 3])  
numpy.tile([1,2,3],(1,2)) -> array([[1, 2, 3, 1, 2, 3]])  
numpy.tile([1,2,3],(2,1)) ->array([[1, 2, 3],[1, 2, 3]])  
注意維度:一維數組shape爲(3,),擴充至2維則shape值爲(1,3),擴充至3維則shape值爲(1,1,3)  
y = x.argsort() #argsort()函數是將x中的元素從小到大排列,提取其對應的index(索引),而後輸出到y  
a = np.array([4, 3, 1, 2])  
j = np.argsort(a)  
print j -> [2 3 1 0]  
print a -> [4 3 1 2]  
print a[j] -> [1 2 3 4]

#sort()

# 直接對對象進行排序,不會產生一個新數組,而是在原數組的基礎上進行修改 # None : 若是待排序的對象是一個視圖的話,則原始數據將會被修改  
obj.sort() # 這種方式會爲原數組建立一個已排序的副本,因此並不會對原數組進行修改 np.sort(obj) # 相同之處:兩種排序均可以接受一個axis參數,用於對相應的行或者列進行排序 # Note : 兩個排序方法都不能夠被設置爲降序,只能是升序,

ndarray.sort(axis=-1, kind='quicksort', order=None)  
或者:ndarray.sort(axis=-1, kind='quicksort', order=None)  
參數     描述  
axis     排序沿數組的(軸)方向,0表示按行,1表示按列,None表示展開來排序,默認值爲-1,表示沿最後的軸排序  
kind     排序的算法,提供了快排'quicksort'、混排'mergesort'、堆排'heapsort', 默認爲‘quicksort'  
order     排序的字段名,可指定字段排序,默認爲None

#meshgrid()

[X,Y]=meshgrid(x,y)  
[X,Y]=meshgrid(x)=[X,Y]=meshgrid(x,x)  
m, n = (5, 3)  
x = np.linspace(0, 1, m)  
y = np.linspace(0, 1, n)  
X, Y = np.meshgrid(x,y)  
X,Y:3行5列

#NumPy 用字符編碼來表示數據類型

數據類型     字符編碼  
整數     		i  
無符號整數        u  
單精度浮點數      f  
雙精度浮點數      d  
布爾值           b  
複數             D  
字符串           S  
Unicode         U  
Void            V

#其餘操做:

z[1::2,::2] = 1  
z[::2,1::2] = 1  
z = np.random.random((10,10))  
zmin,zmax = z.min(),z.max()  
#歸一化,將矩陣規格化到0~1,即最小的變成0,最大的變成1,最小與最大之間的等比縮放  
z = 10*np.random.random((5,5))  
print z  
zmin,zmax = z.min(),z.max()  
z = (z-zmin)/(zmax-zmin)  
print z
交換第0,1行:a[[0,1]] = a[[1,0]]  
#找出數組中與給定值最接近的數  
z = np.array([[0,1,2,3],[4,5,6,7]])  
a = 5.1  
print np.abs(z-a).argmin() -> 5

#判斷二維矩陣中有沒有一整列數爲0?  
z = np.random.randint(0,3,(2,10))  
print z -> [[1 1 2 0 0 1 1 0 2 2],[0 0 2 1 0 2 1 0 1 0]]  
print z.any(axis=0) -> [ True  True  True  True False  True  True False  True  True]
相關文章
相關標籤/搜索