2017/03/07
#!/usr/bin/env python# -*- coding: UTF-8 -*-"""@author: XiangguoSun@contact: sunxiangguodut@QQ.com@file: learn_numpy.py@time: 2017/3/6 15:09@software: PyCharm"""import numpy as np'''1 ndarray'''data=[[1,2,3],[4,5,6]]#也可以是其他序列類型arr1=np.array(data)PRint arr1,arr1.ndim,arr1.shape,arr1.dtypeprint np.zeros((3,)),np.zeros((3,)).ndim,np.zeros((3,)).shapeprint np.zeros((3,1)),np.zeros((3,1)).ndim,np.zeros((3,1)).shapeprint np.zeros((1,3)),np.zeros((1,3)).ndim,np.zeros((1,3)).shapeprint np.zeros(3),np.zeros(3).ndim,np.zeros(3).shape #np.zeros(3)==np.zeros((3,))print np.ones(3)print np.empty(3)print np.ones_like(arr1),np.zeros_like(arr1),np.empty_like(arr1)#shape 為arr1的ndarryprint np.identity(2)#等價于np.eye(2)#創建單位矩陣'''2 ndarray和標量運算大小相同的ndarray之間任何運算都會將運算應用到元素級ndarray與標量的運算也會將那個標量broadcasting到ndarray的各個元素中但是,不同大小的數組之間的運算叫做broadcasting。2.1簡單的運算略2.2 broadcasing廣播的原則:如果兩個數組的后緣維度的軸長相符或者其中一方長度為1,則認為他們是廣播兼容的。廣播會在缺失維度和(或)長度為1的維度上進行。例如:1:shape((4,3))+shape((3,))(4,3)和(3,)的后緣維度為3.因此是廣播兼容的。傳播方向在缺失維度上進行。這里 4 vs 缺失, 3 vs 3因此傳播方向沿著0軸2:shape((4,3))+shape((4,1))(4,3)和(4,1)的后緣維度為:3 vs 1 因此是廣播兼容的。傳播方向在1軸上試想,如果是(1,4,3)和(4,1)呢?也是廣播兼容的,但是傳播方向在0軸和2軸上3:shape((3,4,2))+shape((4,2))(3,4,2)和(4,2)的后緣維度是4vs4 2 vs 2.因此是廣播兼容的,傳播方向在缺失軸0軸4:shape((1,5,3))+shape((5,3))后緣維度是 5 vs 5, 3 vs 3因此是廣播兼容的,傳播方向在缺失軸0軸'''#print np.ones((3,4,2))+np.ones((3,4,2))#報錯,因為廣播不兼容'''2 基本的索引和切片如果你想得到ndarray切片的一份副本而非在源數據上修改,就需要顯示地進行復制操作b=arr[5:8].copy()否則,單純地b=arr[5:8]那么修改b,arr對應的元素也會被修改很簡單,略''''''3,bool型索引'''names=np.array(['bob','bob','david'])values=np.array([1,2,3])print values[names == 'bob']#& | -(!),注意python 關鍵字and or在這里無效print values[values > 2]'''4,花式索引花式索引與切片不同,它總是將數據復制到新數組中'''arr= np.arange(32).reshape((8,4))print arrprint " "print arr[[1,5,2,7]]print arr[[1,5,2,7]]print arr[[1,5,2,7],[2,1,3,1]]#(1,2),(5,1),(2,3),(7,1)print arr[[1,5,2,7]][:,[2,1,3,1]]print arr[np.ix_([1,5,2,7],[2,1,3,1])]'''5,數組轉置和軸對換'''arr= np.arange(15).reshape((3,5))print arrprint arr.transpose()print arr.Tprint np.dot(arr.T,arr)arr = np.arange(16).reshape((2,2,4))print arrprint arr.transpose((1,0,2))#軸序列原本為(0,1,2),現在變成(1,0,2),相當于交換x,y:m[y][x][z]=m[x][y][z]print arr.swapaxes(1,2)#交換1號軸和2號軸m[x][z][y]=m[x][y][z]6,通用函數 通用函數執行元素級別運算的函數。作用到每個元素。
接受兩個一維數組,返回一個平面,這個平面用兩個array接受。

8,where
新聞熱點
疑難解答