python學習筆記——numpy

補充

  • tile(val,(x,y))將val內容複製x行,y列。val可以使單個值,也可以是列表
  • shape()查看矩陣或者數組的維數;如果是一個值,返回'()';如果存在x行,y列,返回'(x,y)';含有n個值得一維數組,返回'(n,)'。d.shape、shape(d)
  • np.argsort()返回的是對一個數組按照從小到大排序的索引數組,例
    arr1=np.array([6,5,-7,89,1])
    arr2Index=arr1.argsort()
    print(arr2Index)
  • 輸出爲:[2 4 1 0 3]也就是對arr1數組從小到大排序,最小的是-7,在原數組中的索引爲2,最大的是89,在原數組中
  • 的索引爲3,索引返回的排序後的索引序列第一個是2,最後一個是3


————————————————此處爲分割線————————————————————

導入numpy

    import numpy as np

創建數組

1.   np.array

np.array接受一切序列型的對象(列表、嵌套列表、數組等),併產生一個數組,並且爲這個新建的數組推斷出一個較爲合適的數據類型(顯示說明除外)。每個ndarray對象都必有兩個屬性shape(數組大小)和dtype(數組類型,數組要求數據是同一類型的)

arr=np.array(n維列表)

arr=np.array([1,2,3])

arr=np.array([[1,2,3],[4,5,6]])

data=[1,2,3]

arr=np.array(data)

2.   其他方式(調用前都需要加np)

zeros、zeros_like

arr=np.zeros(數組長度值)返回的全是0,長度不一樣而已

arr=np.zeros((3,6))一個 三行六列的  值爲0的數組

zeros_like(arr)返回和arr長度一致的,值均爲0的數組

ones、ones_like

arr=np.ones(數組長度值)返回的全是1,長度不一樣而已arr=np.zeros((3,6))一個 三行六列的  值爲1的數組

ones_like(arr)返回和arr長度一致的,值均爲1的數組

empty、empty_like

arr=np.empty()

arr=np.empty((2,3,6))多數情況下返回的是爲初始化的垃圾值,2*3*6數組

empty_like(arr)返回和arr長度一致的,值均爲0的數組

np.arange(n)

np.eys(n,m)n*m矩陣,對角線爲1,其餘爲0

np.identity(n) n*n矩陣,對角線爲1,其餘爲0

np.arange(n)=python內置的range(n),只不過返回的是數組

 

數據轉換

1.  顯示轉換

2.  Arr2=arr1.astype(待轉換的數據類型);arr2.astype(arr1.dtype);astype無論如何都會創建一個新數組

3.  浮點換成小數,小數後面直接省略

運算

1.  大小相等的數組之間的任何運算都會將運算應用到元素級

2.  數值和數組之間的運算,也是作用的數組的元素級

數組訪問(索引和切片)

1.    標量值賦給切片時,廣播

2.    切片修改會直接反映到源數組上

3.    切片想要實現複製效果,需要顯示調用copy(),arr[4:6].copy()

arr3=np.array([[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]]])
print(arr3[1,1,1])
print(arr3[1][1][1])

效果相同

4. 只有冒號’:’表示整個軸區

arr1=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1[2],'shape',arr1[2].shape)
#[7 8 9] shape (3,)
print(arr1[2,:],'shape',arr1[2,:].shape)
#[7 8 9] shape (3,)
print(arr1[2:,:],'shape',arr1[2:,:].shape)
#[[7 8 9]] shape (1, 3)

5.    通過Bool型索引選取數組中的數據,將總是創建數據副本 ,可用& |  內置的and/or無效

arr1=np.array([[1,2,3],[4,5,6],[7,8,9]])
names=np.array(['mike','kangkan','Bob'])
print(names=='Bob')
#[False False  True]
print(arr1[names=='Bob'])
# [[7 8 9]]
print(arr1[names!='Bob'])
# [[1 2 3][4 5 6]]
print(arr1[~(names=='Bob')])
# [[1 2 3][4 5 6]]

6.    花式索引:利用整數數組進行索引,將數據複製到新數組中

import numpy as np
arr1=np.arange(32).reshape(8,4)
print('數組',arr1)
#選取行
print('選中的行爲:',arr1[[1,5,7,4,3]])
print('這是選行:',arr1[[1,2]])
print('這是選值:',arr1[1,2])
print('*********選(1,2)、(2,)、(3,3)、(6,0)**********')
print(arr1[[1,2,3,6],[2,1,3,0]])
print('*********選1236行,並按2130列的順序展示***********')
print(arr1[[1,2,3,6]][:,[2,1,3,0]])
print('*********選1236行,並按2130列的順序展示***********')
print(arr1[np.ix_([1,2,3,6],[2,1,3,0])])


轉置

1.    一二維數組,可以使用arr.T

2.    轉置返回的是源數據的視圖,不進行任何複製操作

3.    高維數組,transpose需要用到一個由軸編號組成的元組,才能進行轉置。

4.    arr.swapaxes()要求給定一對軸編號,根據編號進行軸對換

通用函數

對數組執行元素級運算,諸如np.arange()、np.exp()、np.add()、np.maximum()等返回一個數組

也有一些返回多個數組,如np.modf(arr),返回的就是浮點數的整數和小數兩個部分的數組

import numpy as np
a1=np.arange(10)
a2=np.arange(5,15)
print(a1)
print('******一元運算*******')
print('平方根',np.sqrt(a1))
print('平方',np.square(a1))
print('指數e^x',np.exp(a1))
print('對數log(1+x)',np.log1p(a1))
print('各元素的正負號',np.sign(a1))
print('各元素大於等於該值的最小整數',np.ceil(a1))
print('各元素小於等於該值的最大整數',np.floor(a1))
print('各元素四捨五入到最接近的整數',np.rint(a1))
print('返回小數和整數2個數組',np.modf(a1))
print('返回那些是nan的布爾型數組',np.isnan(a1))
print('返回小數和整數2個數組',np.modf(a1))
print('三角函數',np.sin(a1))
print('not x的真值',np.logical_not(a1))
print('******二元運算*******')
print('對應元素相加',np.add(a1,a2))
print('a1減去a2對應元素',np.subtract(a1,a2))
print('對應元素相乘',np.multiply(a1,a2))
print('a1除a2對應元素類似於/',np.divide(a1,a2))
print('a1向下圓整除a2對應元素(丟棄餘數),類似於//',np.floor_divide(a1,a2))
print('元素級求餘',np.mod(a1,a2))
print('a1對應元素的a2次方',np.power(a1,a2))
print('對應元素最大值',np.maximum(a1,a2))
print('對應元素最小值',np.minimum(a1,a2))
print('第二個數組中值的符號複製給第一個數組中的值',np.copysign(a1,a2))
print('>=返回布爾型數組',np.greater_equal(a1,a2))
print('<返回布爾型數組',np.less(a1,a2))
print('邏輯運算 &',np.logical_and(a1,a2))
print('邏輯運算 ^',np.logical_xor(a1,a2))
print('邏輯運算 |',np.logical_or(a1,a2))


數據處理

a1=np.arange(10)
a2=np.arange(5,15,1)
x,y=np.meshgrid(a1,a1)

np.meshgrid()接收兩個一元數組,返回兩個二維矩陣

Np.where()

Np.where(con,x,y)

當con爲真時,取x的值,否則取y的值;x和y可以數組,也可以是數值

功能類似於 python的三元表達式:x if con else y

數學和統計方法

np.mean(arr)/

arr.mean

np.mean(arr)、arr.mean()求數組所有值的均值,arr.mean(axis=1),求每行的均值,arr.mean(axis=0)求每一列的均值,零長度的數組爲NaN

np.sum(arr)/

arr.sum

arr.sum()求總和,arr.sum(0)豎向求和,arr.sum(1)橫向求和,零長度的數組爲0

np.cumsum(arr) /

arr.cumsum()

arr.cumsum()所有元素的累積和,arr.cumsum(0),豎向累積求和,arr.cumsum(1),橫向累積求和

np.cumprod(arr)/

arr.cumprod()

arr.cumprod()所有元素的累積積,arr.cumprod(0),豎向累積求積,arr.cumprod()(1),橫向累積求積

類似的還有 std()標準差、var()方差、max()最大值、min()最小值、argmax()最大值索引、argmin()最小值索引

l  用於布爾型數組的方法

Any()

any()是否存在一個或多個True(非布爾型數組,大於0都是True)

All()

all()是否所有值都是True(非布爾型數組,大於0都是True)


 排序

arr.sort()排序,arr.sort(0)豎向排序,arr.sort(1)橫向排序。直接修改原來的數組

arr1=np.sort(arr),返回的是已排序的副本,不影響源數組,默認按行排序

數組的集合運算

arr1=np.array([1,2,5,8,9,6,5,4,1,3,2])
arr2=np.array([4,5,6])
print('arr1',arr1)
print('arr2',arr2)
print('找出唯一元素,返回排序後的結果',np.unique(arr1))
print('交集,返回排序後的結果',np.intersect1d(arr1,arr2))
print('並集,返回排序後的結果',np.union1d(arr1,arr2))
print('是否包含,返回布爾型數組',np.in1d(arr1,arr2))
print('集合的差,即在第一個,不在第二個數組中的元素',np.setdiff1d(arr1,arr2))
print('對稱差,在一個數組,不同時在兩個數組中,即並集減去交集的部分',np.setxor1d(arr1,arr2))

線性代數

隨機數生成



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章