国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
numpy數組、向量、矩陣運算

可以來我的Github看原文,歡迎交流。

https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/numpy%E6%95%B0%E7%BB%84%E3%80%81%E5%90%91%E9%87%8F%E3%80%81%E7%9F%A9%E9%98%B5%E8%BF%90%E7%AE%97.md

 

import numpy as npimport pandas as pd

1.array數組

1.1創(chuàng)建array數組

  • np.array
  • np.zeros/empty/ones:傳入形狀即可
  • np.arange():比range更強大
  • np.diag():對角陣

詳細的見下面圖片和例子 

data1 = [6,7.5,8,0,1]arr1 = np.array(data1)#創(chuàng)建arrayprint(arr1)data2 = [data1,data1]arr2 = np.array(data2) #多維度print(arr2)
[ 6.   7.5  8.   0.   1. ][[ 6.   7.5  8.   0.   1. ] [ 6.   7.5  8.   0.   1. ]]
print(arr1.shape,arr2.shape)print(arr1.dtype,arr2.dtype)
(5,) (2, 5)float64 float64
print(np.zeros(10)) #創(chuàng)建都是0的arrayprint(np.empty([2,3,2],dtype=float)) #都是空的array
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.][[[ 0.  0.]  [ 0.  0.]  [ 0.  0.]] [[ 0.  0.]  [ 0.  0.]  [ 0.  0.]]]
print(np.arange(15)) # 類似range函數,但更強大
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
print(np.diag((1,2,3)))# 創(chuàng)建對角陣x = np.arange(10,19).reshape((3,3))print(x)print(np.diag(x)) #提取對角print(np.diag(x,1)) #注意對角線的位置
[[1 0 0] [0 2 0] [0 0 3]][[10 11 12] [13 14 15] [16 17 18]][10 14 18][11 15]

1.2array數據類型

  • 要使用astype來進行轉化。轉化的過程中產生一份拷貝。

arr1 = np.array([1,2,3],dtype=np.float64) #初始化顯式聲明print(arr1.dtype)
float64
int_arr1 = arr1.astype(np.int) # 類型轉化print(int_arr1.dtype)#浮點型=>整型。向下取整strintArr = np.array(['15','1.6'],dtype=np.string_)print(strintArr)print(strintArr.astype(np.float))
int32[b'15' b'1.6'][ 15.    1.6]

1.3數組運算

不用再寫循環(huán)了,運算符號會被映射到每個element

1.4切片和索引

注意:如果需要一份拷貝(副本),而不是視圖,需要調用arr.copy()/arr[索引]copy()。

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

1.5布爾值索引

不是 or 運算

  • |:或
  • &:且
names = np.array(['a','b','c','d','e','f','g'])data = np.random.randn(7,4)print(names)print(data)
['a' 'b' 'c' 'd' 'e' 'f' 'g'][[ 1.19251264  0.22746816 -1.05968475  0.36553691] [-0.87272129  0.15983765  1.05599441 -0.34609556] [-0.09671786 -0.19573923 -0.83697376 -1.07516871] [-1.91951334  0.29178043  0.77103957 -0.00420115] [ 0.86798399  0.25577025  0.34729878 -0.35262573] [-1.7260201   0.45041534  0.41955063 -0.05338469] [-1.28550254 -0.21678863  0.52706647 -0.32517928]]
print(data[names=='b']) print(data[names=='b',:]) #注意形狀。因為names=='b'不確定,所以為了不損失,維度還是2維
[[-0.87272129  0.15983765  1.05599441 -0.34609556]][[-0.87272129  0.15983765  1.05599441 -0.34609556]]
mask = (names=='a') | (names=='b')print(mask)
[ True  True False False False False False]

1.6花式索引:不同于切片

注意[]的嵌套

arr = np.empty((8,4))for i in range(8):    arr[i]=iprint(arr)
[[ 0.  0.  0.  0.] [ 1.  1.  1.  1.] [ 2.  2.  2.  2.] [ 3.  3.  3.  3.] [ 4.  4.  4.  4.] [ 5.  5.  5.  5.] [ 6.  6.  6.  6.] [ 7.  7.  7.  7.]]
print(arr[4,3])print(arr[[4,3]])
4.0[[ 4.  4.  4.  4.] [ 3.  3.  3.  3.]]
arr = np.arange(32).reshape((8,4))print(arr)print(arr.shape)
[[ 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 30 31]](8, 4)
print(arr[[1,5,7,2],[0,3,1,2]])print(arr[[1,5,7,2]][:,[0,3,1,2]])
[ 4 23 29 10][[ 4  7  5  6] [20 23 21 22] [28 31 29 30] [ 8 11  9 10]]

1.7數組轉置和軸對換

  • reshape(形狀):設置維度,變化形狀
  • transpose()/.T:轉置數組
  • np.dot(a1,a2..):當做向量乘法

1.8數組重復

  • np.tile()
a= [0,1,3]print(np.tile(a,2))print(np.tile(a,(2,1))) #編程2維數組a = [[0,1,3],[5,9,8]]print(np.tile(a,3))
[0 1 3 0 1 3][[0 1 3] [0 1 3]][[0 1 3 0 1 3 0 1 3] [5 9 8 5 9 8 5 9 8]]

1.9等比和等差數列

  • np.linspace():等差
  • np.logspace():等比。base默認為10
a = np.linspace(1,10,10)#用到三個參數,第一個參數表示起始點、第二個參數表示終止點,第三個參數表示數列的個數print(a)#還可以使用參數endpoint來決定是否包含終止值,如果不設置這個參數,默認是Truea = np.linspace(1,10,10,endpoint=False)print(a)
[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.][ 1.   1.9  2.8  3.7  4.6  5.5  6.4  7.3  8.2  9.1]
a = np.logspace(0,0,10)print(a)a = np.logspace(0,9,10,base=2)print(a)
[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.][   1.    2.    4.    8.   16.   32.   64.  128.  256.  512.]

2.通用函數:快速的元素及數組函數

元素級,是針對每個element。并且,函數分為一元(一個參數)和二元(兩個參數)

一元的func: 

 


**二元的func:** ![](../../Images/機器學習/numpy數組、向量、矩陣運算/6.png)

arr = np.arange(10)print(arr)print(np.exp(arr))print(np.sqrt(arr))print(np.modf(arr)) #用于浮點數數組的整數部分和小數部分
[0 1 2 3 4 5 6 7 8 9][  1.00000000e+00   2.71828183e+00   7.38905610e+00   2.00855369e+01   5.45981500e+01   1.48413159e+02   4.03428793e+02   1.09663316e+03   2.98095799e+03   8.10308393e+03][ 0.          1.          1.41421356  1.73205081  2.          2.23606798  2.44948974  2.64575131  2.82842712  3.        ](array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]), array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.]))
x = np.random.randn(8)y = np.random.randn(8)print("x:",x,";\ny:",y)print(np.maximum(x,y)) # 求元素級的最大值
x: [-0.95850365 -1.04703965  1.1886987   0.56798014 -0.45694937  0.15069229 -0.40014771  1.34484067] ;y: [ 0.13101485 -1.85842918  0.41106248  1.0749786   0.1840417  -0.26923493  0.76304996  1.78898707][ 0.13101485 -1.04703965  1.1886987   1.0749786   0.1840417   0.15069229  0.76304996  1.78898707]

2.利用數組進行數據處理

2.1條件邏輯表述為數組運算

  • np.where(condition,xarr,yarr),優(yōu)點如下:
    1. 速度快上n個數量級
    2. 針對每個element實現的if else
    3. 第二個和第三個參數,除了數組,還可以是標量值
xarr = np.array([1.1,1.2,1.3,1.4,1.5])yarr = np.array([2.1,2.2,2.3,2.4,2.5])cond = np.array([True,False,True,True,False])result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)] # 原來的方法print(result)result = np.where(cond,xarr,yarr)print(result)
[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5][ 1.1  2.2  1.3  1.4  2.5]
arr = np.random.randn(4,4)print(arr)print(np.where(arr>0,2,-2)) #大于0的為2,小于0的為-2
[[ 0.59503627  0.53821458 -0.46326505 -0.53595914] [-0.25468951 -0.44695157  0.46815475  0.77838542] [-0.3850164   0.39158841  0.11306119 -0.44023648] [ 0.74045044 -0.2408556  -1.01937278  0.32737532]][[ 2  2 -2 -2] [-2 -2  2  2] [-2  2  2 -2] [ 2 -2 -2  2]]

這里有個更難的例子: 

2.2數學和統(tǒng)計方法

即可以當做數組的方法調用,也可以當做頂級NumPy函數調用

  • sum/mean等為聚合運算
  • cumsum/cumprod:不聚合,產生一個由中間結果組成的數組

arr = np.random.rand(5,4)print(arr.mean())print(arr.mean(axis = 1))print(np.mean(arr))print(np.mean(arr,axis=1))
0.486269616896[ 0.26406933  0.68176035  0.54759211  0.69419806  0.24372824]0.486269616896[ 0.26406933  0.68176035  0.54759211  0.69419806  0.24372824]
print(np.cumsum(arr))
[ 0.08485774  0.41551307  0.83665035  1.05627732  2.02498055  2.31023776  2.78723692  3.78331871  4.49977774  5.05458786  5.6577695   5.97368714  6.43269243  7.34869806  7.93297889  8.75047938  8.89718805  8.99359637  9.61767525  9.72539234]

2.3布爾型方法

注意:對于上面這些方法,bool型會被自動轉化為1/0

  • any:檢測是否有一個True
  • all:檢測是否都為True
arr = np.random.randn(100)print((arr>0).sum())
50
boolArr = np.array([False,False,True,False])print(boolArr.any())print(boolArr.all())
TrueFalse

2.4 排序

調用后,原來的arr就改變了

arr = np.random.randn(8)print(arr)arr.sort()print(arr)arr = np.random.randn(5,3)print(arr)arr.sort(1)print(arr)
[ 0.65805019  1.1477457  -0.13527229 -0.36565657 -0.22426346 -0.5084691  0.57423863  1.67541665][-0.5084691  -0.36565657 -0.22426346 -0.13527229  0.57423863  0.65805019  1.1477457   1.67541665][[-0.8629666  -1.14722197 -0.23675518] [ 0.06331798  0.44684519  0.36401337] [ 0.71542329  0.70223347 -0.72877248] [ 1.03857508  0.40552221  1.97313196] [ 0.54667853 -0.45607286 -0.82201063]][[-1.14722197 -0.8629666  -0.23675518] [ 0.06331798  0.36401337  0.44684519] [-0.72877248  0.70223347  0.71542329] [ 0.40552221  1.03857508  1.97313196] [-0.82201063 -0.45607286  0.54667853]]

2.5去重和其他集合邏輯

  • unique(x):去重,并返回排序結果
  • in1d(x,y):得到x的元素是否包含于y數組的bool型數組

3.隨機生成

位于:np.random中。并且速度快上很多數量級,除此之外,做了array的擴充,否則原生的random進行運算會報錯 

示例:隨機漫步

# python版本的import randomposition = 0walk = [position]steps = 1000for i in range(steps):    step=1 if random.randint(0,1) else -1    position += step    walk.append(position)    # numpy版本的steps = 1000draws = np.random.randint(0,2,size=steps) #size還可以是二維數組,這樣,就能產生一次多個隨機漫步steps = np.where(draws>0,1,-1)walk = steps.cumsum()# 總和# print(walk.min(),walk.max())

4. 存儲和讀取

xarr = np.arange(10)yarr = np.arange(50)np.save('xarr',arr)print(np.load('xarr.npy'))
[[-1.14722197 -0.8629666  -0.23675518] [ 0.06331798  0.36401337  0.44684519] [-0.72877248  0.70223347  0.71542329] [ 0.40552221  1.03857508  1.97313196] [-0.82201063 -0.45607286  0.54667853]]
np.savez('t.npz',x=xarr,y=yarr)t = np.load('t.npz')print(t['x'])print(t['y'])
[0 1 2 3 4 5 6 7 8 9][ 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]

4.2存取文本文件

看截圖。更推薦,pandas處理 

5.線性代數

更推薦spicy庫 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python中的Numpy入門教程
Python基礎數據處理庫
Python numpy的基本操作你一般人都不會
《Python程序設計》第8章 數據分析和可視化
numpy
Numpy 數組的一些集合操作
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服