日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy 相关函数

發(fā)布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy 相关函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.numpy.ndim
a,b的ndim是指數(shù)組的行數(shù),或者說是數(shù)組第一維是多少。就是數(shù)組的維數(shù),對于二維可以用array[x][y],三維可以用array[x][y][z].你可以想成二維的是一個灰度圖像,三維的是rgb這種多通道圖像

>>> d array([[[1, 1, 1, 1],[1, 1, 1, 1],[1, 1, 1, 1]],[[1, 1, 1, 1],[1, 1, 1, 1],[1, 1, 1, 1]]], dtype=int16) >>> e array([[ 1.5, 2. , 3. ],[ 4. , 5. , 6. ]]) >>> d.ndim 3 >>> e.ndim 2 >>> a array([ 1., 2., 3.]) >>> b array([[ 1.5, 2. , 3. ],[ 4. , 5. , 6. ]]) >>> c array([[ 0., 0., 0., 0.],[ 0., 0., 0., 0.],[ 0., 0., 0., 0.]]) >>> a.ndim 1 >>> b.ndim 2 >>> c.ndim 2 >>>

2.numpy.shape 返回數(shù)組維數(shù)的元組

>>> y=np.zeros((2,3,4)) >>> y.shape (2, 3, 4) #表示234列的數(shù)組組成 >>> y array([[[ 0., 0., 0., 0.],[ 0., 0., 0., 0.],[ 0., 0., 0., 0.]],[[ 0., 0., 0., 0.],[ 0., 0., 0., 0.],[ 0., 0., 0., 0.]]]) >>> b=np.array([[1.5,2.,3.],[4.,5.,6.]]) >>> b.ndim 2 >>> b.shape #返回23列的數(shù)組,2表示行數(shù),3表示列數(shù) (2, 3) >>> b.shape[0] #返回的是幾行即幾維 2 >>> b.shape[1] #返回的是幾列 3

3.numpy.random.seed(0)的作用
使得隨機數(shù)據(jù)可預測,當我們設置相同的seed,每次生成的隨機數(shù)相同。如果不設置seed,則每次會生成不同的隨機數(shù).

>>> numpy.random.seed(0) >>> numpy.random.rand(4) array([ 0.5488135 , 0.71518937, 0.60276338, 0.54488318])

4.numpy.concatenate數(shù)組拼接
numpy.concatenate((a1,a2,…), axis=0)函數(shù),能夠一次完成多個數(shù)組的拼接。其中a1,a2,…是數(shù)組類型的參數(shù)。

>>> a=np.array([1,2,3]) >>> b=np.array([11,22,33]) >>> c=np.array([44,55,66]) >>> np.concatenate((a,b,c),axis=0) # 默認情況下,axis=0可以不寫 array([ 1, 2, 3, 11, 22, 33, 44, 55, 66]) #對于一維數(shù)組拼接,axis的值不影響最后的結果 >>> a=np.array([[1,2,3],[4,5,6]]) >>> b=np.array([[11,21,31],[7,8,9]]) >>> np.concatenate((a,b),axis=0) array([[ 1, 2, 3],[ 4, 5, 6],[11, 21, 31],[ 7, 8, 9]]) >>> np.concatenate((a,b),axis=1) #axis=1表示對應行的數(shù)組進行拼接 array([[ 1, 2, 3, 11, 21, 31],[ 4, 5, 6, 7, 8, 9]])

對numpy.append()和numpy.concatenate()兩個函數(shù)的運行時間進行比較,concatenate()效率更高,適合大規(guī)模的數(shù)據(jù)拼接

>>> from time import clock as now >>> a=np.arange(9999) >>> b=np.arange(9999) >>> time1=now() >>> c=np.append(a,b) >>> time2=now() >>> print time2-time1 28.2316728446 >>> a=np.arange(9999) >>> b=np.arange(9999) >>> time1=now() >>> c=np.concatenate((a,b),axis=0) >>> time2=now() >>> print time2-time1 20.3934997107

5.numpy中的inf表示一個無限大的正數(shù)

import numpy x = numpy.inf x>9999999999999999999 #返回結果為:True

6.astype改變array數(shù)組內數(shù)值的類型

#用法1:直接將原來的類型轉換成現(xiàn)在指定的類型 numeric_strings=np.array(['1.25','-9.6','42'],dtype=np.string_) numeric_strings=numeric_strings.astype(float) #沒寫np.float64,因為python類型會映射到等價的dtype上#用法2:可直接引用另外一個變量的dtype,基要和另一個數(shù)組一樣的類型則直接用該數(shù)組.dtype int_array=np.arange(10) #輸出是:array([0,1,2,3,4,5,6,7,8,9]) calibers=np.array([.22,.270,.33],dtype=np.float64) int_array=int_array.astype(calibers.dtype) #將前面的int的奕成float64 #print_array的值為:array([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,])

7.切片與python代碼的不同點
當你將一個標量值(一維中的都是單個詞,這里標量指的就是單個值)賦值給一個切片時(如arr[5:8]=12),該值會自動傳播(即”廣播”)到整個選區(qū)。
與列表最重要的區(qū)別在于,numpy中的數(shù)組切片是原始數(shù)組的視圖,這意味著數(shù)據(jù)不會被復制,
視圖上的任何修改都會直接反映到源數(shù)組上。即映射到原來數(shù)組上

arr=np.arange(10) #輸出: array([0,1,2,3,4,5,6,7,8,9]) print arr print arr[5] #輸出:5 print arr[5:8] #輸出:array([5,6,7]) arr[5:8]=12 print arr #會把前面的切片映射到原數(shù)組arr上,故此時輸出結果是:array([0,1,2,3,4,12,12,12,8,9]) arr_slice=arr[5:8] #取出[5:8]的位值,即[5,6,7],也是現(xiàn)在新的數(shù)組的12處 arr_slice[1]=12345 #在取出的arr_slice中取第一個數(shù)即[6]處,即新的數(shù)組的中間的12處 print arr #輸出結果是:array([0,1,2,3,4,12,12345,12,8,9]) #如果你想要得到的是ndarray切片的一份副本而非視圖,就需要顯式地進行復制操作,例如:arr[5:8].copy(). arr[5:8].copy() #因為Numpy設計目的是處理大數(shù)據(jù),假如Numpy堅持要將數(shù)據(jù)復制來復制去的話會產生性能和內存的問題

8.多維數(shù)組中元素索引
多維數(shù)組取某個元素值

arr2d=np.array([1,2,3],[4,5,6],[7,8,9]) print arr2d[2] #返回的值:array([7,8,9]) #若要取每個列表中的單個值,可以用逗號隔開的索引列表來選擇單個元素#下面兩種方法是一樣的 #方法1:有點像python中先按元組的方法取出單個列表,再用列表的方法取出值 print arr2d[0][2] #輸出結果:3 #方法2:直接用逗號隔開的索引列表來選取 print arr2d[0,2] #輸出結果:3

多維數(shù)組元素索引

#下面是2X2X3的數(shù)組,即223列的數(shù)組 arr3d=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) print arr3d #輸出的結果如下[[[ 1 2 3][ 4 5 6]] [[ 7 8 9][10 11 12]]]#取出arr3d[0] print arr3d[0] #結果:取出第一個數(shù)組:[[1,2,3],[4,5,6]]

標量值和數(shù)組都可以被賦值

old_values=arr3d[0].copy() #old_values就是上面arr3d[0]的值 arr3d[0]=42 #arr3d[0]的數(shù)組的值都為42 print arr3d #輸出結果如下 # [[[42 42 42] # [42 42 42]] # # [[ 7 8 9] # [10 11 12]]] arr3d[0]=old_values #old_values的值賦值給arr3d[0]中 print arr3d #輸出結果如下: # [[[ 1 2 3] # [ 4 5 6]] # # [[ 7 8 9] # [10 11 12]]]

以此類推,arr3d[1,0]可以訪問索引以(1,0)開頭的那些值(以一維數(shù)組的形式返回):
print arr3d[1,0]
返回的結果是:array([7,8,9])

9.多維數(shù)組中切片索引

arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]]) print arr2d print arr2d[:2] #輸出結果是:array([[1,2,3],[4,5,6]]) print arr2d[:2,1:] #在前面取出的arr2d[:2]的基礎上再取各個數(shù)組的從1:開始 #輸出結果 # [[2 3] # [5 6]] print arr2d[1,:2] #先取出1的數(shù)組(從0開始的),即[4,5,6],再:2是取從頭取到第2個,但不包括位置為2的值,即[4,5] #輸出結果為: # array[4 5] print arr2d[2,:1] #如上,得到的結果是:array([7])

注意:“只有冒號”表示選取整個軸,如下

print arr2d[:,:1] #第一個:表示所有軸都選中,第2個:1是取每個數(shù)組的第一個值 #輸出結果是: [[1][4][7]]

對切片表達式的賦值操作也會被擴散到整個選區(qū):

arr2d[:2,1:]=0 #先取位置為0:2不包括2的位置的數(shù)組即[[1,2,3],[4,5,6]], # 后面的1:是從位置為1開始一直取到結束即[8,9]位置都賦0 print arr2d #輸出結果如下: [[1 0 0][4 0 0][7 8 9]]

10.布爾索引

names=np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) data=np.random.rand(7,4) #隨行生成74列的數(shù)組 print data print names print names=='Bob' #輸出的結果是:[ True False False True False False False]print data[names=='Bob'] #因為names=='Bob'為True有兩個,則生成24列的隨機數(shù)組print names!='Bob' #輸出結果是:[False True True False True True True] print data[(names!='Bob')] ##因為names!='Bob'5個為True的,則生成54列的隨機數(shù)組 #使用算術運算符:&,| mask=(names=='Bob') | (names=='Will') #[ True False True True True False False]print mask print data[mask] #因為mask為True的有4個,則生成44列的數(shù)組布爾型數(shù)組和切片混合使用 print data[names=='Bob',2:] #data[names=='Bob']中每個數(shù)組中取2:位置開始到最后的元素 # data[names=='Bob']的結果是: # [[ 0.90203958 0.02821906 0.30351464 0.33156672] # [ 0.60263345 0.97656289 0.58361359 0.06398002]] #然后data[names=='Bob',2:]之后的結果是: # [[ 0.30351464 0.33156672] # [ 0.58361359 0.06398002]] print data[names=='Bob',3] #data[names=='Bob']中每個數(shù)組中取3這個位置的數(shù) #輸出的結果是: # [ 0.33156672 0.06398002]

通過布爾型索引選取數(shù)組中的數(shù)據(jù),將總是創(chuàng)建數(shù)據(jù)的副本,即使返回一模一樣的數(shù)組也是如此。
通過布爾型數(shù)組設置值是一種經常用到的手段。如將data中的所有負值都設置為0,我們只需如下:

data[data<0]=0 print data

通過一維布爾數(shù)組設置整行或列的值也很簡單:

data[names!='Joe']=7 #不是Joe的為True,有多少個True就總共該data數(shù)組有 #少行,將為True的這一行的值都為7 print data #返回的結果如下: [[ 7. 7. 7. 7. ][ 0.11834433 0.25350225 0.45062154 0.1694289 ][ 7. 7. 7. 7. ][ 7. 7. 7. 7. ][ 7. 7. 7. 7. ][ 0.7159481 0.70406219 0.50870176 0.8419536 ][ 0.97546717 0.36981413 0.35265204 0.88268987]]

11.花式索引
它指的是利用整數(shù)數(shù)組進行索引

arr=np.empty((8,4)) for i in range(8):arr[i]=i #arr[i]是指的行,arr[1]是指的第一行 print 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.]] #為了以特定順序選取子集,只需傳入一個用于指定順序的整數(shù)列或ndarray即可 print arr[[4,3,0,6]] #取arr中4的位置的行,切片為正數(shù)時則從下標0開始, # 但是負數(shù)是從最后開始倒數(shù)第幾個,這個時間沒有0哦,例如-2,那就是倒數(shù)第2行 #輸出的結果如下: # [[ 4. 4. 4. 4.] # [ 3. 3. 3. 3.] # [ 0. 0. 0. 0.] # [ 6. 6. 6. 6.]]

負數(shù)索引,從尾部開始

print arr[[-3,-5,-7]] #輸出的結果如下: # [[ 5. 5. 5. 5.] # [ 3. 3. 3. 3.] # [ 1. 1. 1. 1.]]

一次傳入多個索引數(shù)組會有一點特別,它返回的是一個一維數(shù)組,其中的元素對應各個索引元組

arr=np.arange(32).reshape((8,4)) #arange(32)即32個數(shù)(從0-31),數(shù)組的shape是84列 print arr #返回結果如下: # [[ 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]] print arr[[1,5,7,2],[0,3,1,2]] #第一個數(shù)組是取出的行,例1表示下標為1的行取出(下標是從0開始),則取出的是[4 5 6 7] #第二個數(shù)組是在前面取出的行的行幾個元素,上面是1行對應的是0下標元素,由取第1行的第一個元素,即4,所以第一個數(shù)是4, #依此類推,最終選出的元素是(1,0),(5,3),(7,1),(2,2).第2個數(shù)是:下標為5的行位置為3的元素,即23. #輸出的結果如下: # [ 4 23 29 10]

要得到多維數(shù)組則要[:, ]將整行取出

print arr[[1,5,7,2]][:,[0,3,1,2]] #先取出[1,5,7,2]行,再[:,]取一整行,[0,3,1,2]是一整行元素的取值,先 #取的是0元素,再取3(該行的第4個元素),再取1(第2個元素),最后取2(第3個元素) #輸出的結果如下: # [[ 4 7 5 6] # [20 23 21 22] # [28 31 29 30] # [ 8 11 9 10]]

花式索引跟切片不一樣,它總是將數(shù)據(jù)復制到新數(shù)組中。

12.數(shù)組轉置和軸對換
transpose方法

arr=np.arange(15).reshape((3,5)) print arr #輸出結果如下: # [[ 0 1 2 3 4] # [ 5 6 7 8 9] # [10 11 12 13 14]] print arr.T #輸出結果如下: # [[ 0 5 10] # [ 1 6 11] # [ 2 7 12] # [ 3 8 13] # [ 4 9 14]] #在進行矩陣計算時,經常會用到該操作,比如利用np.dot計算矩陣內積XTX. arr=np.random.rand(6,3) print np.dot(arr.T,arr)arr=np.arange(16).reshape((2,2,4)) #reshape(2,2,4)指224列的數(shù)組 print arr #輸出的結果如下: # [[[ 0 1 2 3] # [ 4 5 6 7]] # # [[ 8 9 10 11] # [12 13 14 15]]]

ndarray還有一個swapaxes方法,它需要接受一對輛編號

print arr.swapaxes(1,2) #輸?shù)浇Y果如下: # [[[ 0 4] # [ 1 5] # [ 2 6] # [ 3 7]] # # [[ 8 12] # [ 9 13] # [10 14] # [11 15]]]

13.快速的元素級數(shù)組函數(shù)

#例如:sqrt,exp等一元的 arr=np.arange(10) print np.sqrt(arr) #開方 print np.exp(arr)#add,max接受兩個數(shù)組的,叫二元,并返回一個結果數(shù)組 x=random.rand(8) y=random.rand(8) print x print y print np.maximum(x,y) #元素級最大值,取x,y各對應的比較。如x[0]和y[0]比較,哪個大就放在np.maximum(x,y)生成新的數(shù)組中arr=random.rand(7)*5 print np.modf(arr)

一元是針對數(shù)組里的各個元素,二元是針對兩個數(shù)組中各對應的元素
(如:x(1)-y(1),即相同位置的值進行操作)
一元的ufunc函數(shù):

abs,fabs 絕對值,對于非復數(shù)值,可以使用更快的fabs sqrt 平方根 square 平方 exp 指數(shù) log 對數(shù) sign 各元素的正負號:1(正),0(零),-1(負數(shù)) ceil >=該值的最小整數(shù) floor <=該值的最大整數(shù) rint 四舍五入到最接近的整數(shù),保留dtype modf 將數(shù)組的小數(shù)和整數(shù)部分以兩個獨立數(shù)組的形式返回 isnan 返回一個表示“哪些值是NaN(這不是一個數(shù)字)”的布爾型數(shù)組 isfinite/isinf 分別返回一個表示“哪些元素是有窮的(非inf,非NaN)”或“哪些元素是無窮的”的布爾型數(shù)組 cos,cosh,sin,sinh,tan,tanh 三角函數(shù) arccos,arccosh,arcsin,arcsinh,arctan,arctanh 反三角函數(shù) logical_not 計算各元素not x的真值。相當于-arr

二元的ufunc函數(shù):需要兩個數(shù)組的

add 相加 subtract 第一個數(shù)組減第二個數(shù)組 multiply 各元素相乘 divide,floor_divide 除法或向下圓整除法(丟棄余數(shù)) power 對第一個數(shù)組中的元素A,根據(jù)第二個數(shù)組中的相應元素B,計算A的B次方 maximum,fmaxt 元素級的最大值計算,fmax將忽略NaN mimimum,fmin 元素級的最小值計算,fmin將忽略NaN mod 元素級的求模計算(除法的余數(shù)) copysign 將第二個數(shù)組中的值的符號復制給第一個數(shù)組中的值 greater,greater_equal,less,less_equal,equal,not_equal >,>=,<,<=,==,!= logical_and,logical_or,logical_xor &,|,^(即與,或,非)

14.利用數(shù)組進行數(shù)據(jù)處理
where的用法

import numpy as np from numpy import random import matplotlib.pyplot as pltpoints=np.arange(-5,5,0.01) xs,ys=np.meshgrid(points,points) print ys z=np.sqrt(xs**2+ys**2) print z plt.imshow(z,cmap=plt.cm.gray);plt.colorbar() plt.title("Image plot of $\sqrt{x^2+y^2}$ for a grid of values")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#上面的純python用在大數(shù)據(jù)處理速度太慢,而且無法用于多維數(shù)組中 # 而改成numpy的where就能解決 result=np.where(cond,xarr,yarr) #where第一個值是條件,即cond為True,則返回xarr,否則返回yarr print result

在數(shù)據(jù)分析工作中,where通常用于根據(jù)另一個數(shù)組而產生一個新的數(shù)組。
(1)np.where的第二個和第三個參數(shù)不必是數(shù)組,它們都可以是標量值(即單個數(shù)值)。
(2)傳遞給where的數(shù)組大小可以不相等,甚至可以是標量值
例:設一個由隨機數(shù)據(jù)組成的矩陣,將所有正值規(guī)制為2,將所有負值替換為-2.用where

arr=random.randn(4,4) print arr arr_new=np.where(arr>0,2,-2) print arr_new print np.where(arr>0,2,arr) #只將正值設置為2,因為當arr>0為假時,則還是傳arr原來的值

例2:兩個布爾型cond1和cond2,希望根據(jù)4種不同的布爾值組合實現(xiàn)不同的賦值操作

result=[] for i in range(n):if cond1[i] and cond2[i]:result.append(0)elif cond1[i]:result.append(1)elif cond2[i]:result.append(2)else:result.append(3) # 這個for循環(huán)確實可以改成一個嵌套的where表達式 np.where(cond1&cond2,0,np.where(cond1,1,np.where(cond2,2,3))) #在上面的例子中,我們還可以利用"布尒值在計算過程中可以被當作0或1處理" result=1*(cond1-cond2)+2*(cond2&-cond1)+3*-(cond1|cond2)

15.數(shù)學和統(tǒng)計方法
可以對數(shù)組上的一組數(shù)學函數(shù)對整個數(shù)組或某個軸向的數(shù)據(jù)進行統(tǒng)計計算 ,
如sum,mean(求均值),std(標準差)等聚合計算 .

arr=np.random.randn(5,4) #randn正態(tài)分布的數(shù)據(jù) print arr.mean() print np.mean(arr) print arr.sum()

mean和sum這類的函數(shù)可以接受一個axis參數(shù),用于計算該軸向上的統(tǒng)計值

print arr.mean(axis=1) print arr.sum(0)

cumsum和cumprod之類的方法則不聚合,而是產生一個由中間結果組成的數(shù)組

arr=np.array([[0,1,2],[3,4,5],[6,7,8]]) print arr #輸出結果 # [[0 1 2] # [3 4 5] # [6 7 8]] print arr.mean(axis=1) #axis=1是行,每一行求均值 #輸出結果:[ 1. 4. 7.] print arr.mean(axis=0) #axis=0是列,每一列求平均值 #輸出結果:[ 3. 4. 5.] print arr.mean(axis=2) #axis=2報錯,報out of rangeprint arr.cumsum(0) #0是列,即每一列累積和 #輸出結果: # [[ 0 1 2] # [ 3 5 7] # [ 9 12 15]] print arr.cumprod(1) #1是行,即每一行累計積 #輸出結果 # [[ 0 0 0] # [ 3 12 60] # [ 6 42 336]]

基本數(shù)組統(tǒng)計方法

sum 對數(shù)組全部或某軸向的元素求和 mean 算術平均數(shù) std,var 標準差和方差 min,max 最大值和最小值 argmin,argmax 分別為最大和最小元素的索引 cumsum 所有元素的累計和 cumprod 所有元素的累計積

16.用于布爾型數(shù)組的方法
布爾值會被強制轉換為1(True)和0(False).sum被用來對布爾型數(shù)組中的True值計數(shù).
主要有sum,any,all的方法.
any用于測試數(shù)組中是否存在一個或多個True.
all則檢查數(shù)組中所有值是否都是True.

arr=random.randn(100) print (arr>0).sum() #正值的個數(shù),因為arr>0為True時是1,再sum()是對1的數(shù)求和, # 多少個1相加,就有多少個arr>0的數(shù) bools=np.array([False,False,True,False]) print bools.any() #檢測bools中是否有True的 print bools.all() #檢測bools中的值是否都是True

any,all這兩個方法也能用于非布爾型數(shù)組,所有非0元素將會被當做True.

17.排序、唯一化及Numpy中數(shù)組集合邏輯

#排序 #與python內置的列表類型一樣,Numpuy arr=random.randn(8) print arr print arr.sort()arr=random.randn(5,3) print arr arr.sort(1) print arr

唯一化以及其它的集合邏輯

names=np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) print np.unique(names) ints=np.array([3,3,3,2,2,1,1,4,4])print np.unique(ints) #用np.unique等價的純python代碼來對比一下: print sorted(set(names)) #輸出結果如下: ['Bob' 'Joe' 'Will']#np.in1d用于測試一個數(shù)組中的值在另一個數(shù)組中的成員,返回一個布爾型數(shù)組。 values=np.array([6,0,0,3,2,5,6]) print np.in1d(values,[2,3,6]) #輸出結果如下: [ True False False True True False True]

Numpy中數(shù)組的集合運算

unique(x) 計算x中的唯一元素,并返回有序結果 intersect1d(x,y) 計算xy中的公共元素,并返回有序結果 union1d(x,y) 計算xy的并集,并返回有序結果 in1d(x,y) 得到一個表示“x的元素是否包含于y”的布爾型數(shù)組 setdiff1d(x,y) 集合的差,即元素在x中且不在ysetxor1d(x,y) 集合的對稱差,即存在于一個數(shù)組中但不同時存在于兩個數(shù)組中的元素

18.用于數(shù)組的文件的輸入和輸出
數(shù)組以二進制格式保存到磁盤
(1)np.save和np.load是讀寫磁盤數(shù)組數(shù)據(jù)的兩個主要函數(shù)。np.save是保存即寫入到磁盤,np.load是讀取磁盤上的數(shù)組
(2)np.savez可以將多個數(shù)組保存到一個壓縮文件中,將數(shù)組以關鍵字參數(shù)的形式傳入即可。它的擴展名為.npz
(3)np.loadtxt或者np.genfromtxt將數(shù)據(jù)加載到普通的Numpy數(shù)組中(操作的是txt文件)
(4)np.savetxt是將數(shù)組保存到txt文件中
(5)它是以二進制寫入的,故直接用text打開是亂碼
(6)默認情況下,數(shù)組是以未壓縮的原始二進制格式保存在擴展名為.npy的文件中的。

arr=np.arange(10) print arr np.save('some_array',arr) #文件路徑末尾沒有擴展名.npy,則該擴展名會被自動加上。 print np.load('some_array.npy') #np.savez可以將多個數(shù)組保存到一個壓縮文件中,將數(shù)組以關鍵字參數(shù)的形式傳入即可。它的擴展名為.npz np.savez('array_archive.npz',a=arr,b=arr) #讀取/加載npz文件,會得到一個類似字典的對象,該對象會對各個數(shù)組進行延時加載 arch=np.load('array_archive.npz') print arch['b'] #結果是:[0 1 2 3 4 5 6 7 8 9] #存取文本文件 #python中的文件讀寫函數(shù)的格式很容易將手搞暈,所以我們將介紹pandas中的read_csv和read_table函數(shù), #有時我們需要用np.loadtxt或者np.genfromtxt將數(shù)據(jù)加載到普通的Numpy數(shù)組中。 arr=np.loadtxt('/Users/mac/PycharmProjects/python2.7/BigData/Digital-Signage/submit_Digital/array_ex.txt',delimiter=',') #array_ex.txt中的內容如下 # 0.580052,0.186730,1.040717,1.134411 # 0.194163,-0.636917,-0.938659,0.124094 # -0.126410,0.268607,-0.695724,0.047428 # -1.484413,0.004176,-0.744203,0.005487 # 2.302869,0.200131,1.670238,-1.881090 # -0.193230,1.047233,0.482803,0.960334 print arr #按分隔符取出后如下 # [[ 0.580052 0.18673 1.040717 1.134411] # [ 0.194163 -0.636917 -0.938659 0.124094] # [-0.12641 0.268607 -0.695724 0.047428] # [-1.484413 0.004176 -0.744203 0.005487] # [ 2.302869 0.200131 1.670238 -1.88109 ] # [-0.19323 1.047233 0.482803 0.960334]] #np.savetxt執(zhí)行的是相反的操作,將數(shù)組寫到以某種分隔符隔開的文本文件中。 arr1=np.array([[ 0.580052,0.18673,1.040717,1.134411],[ 0.194163,-0.636917,-0.938659,0.124094],[-0.12641,0.268607,-0.695724,0.047428],[-1.484413,0.004176,-0.744203,0.005487],[ 2.302869,0.200131,1.670238,-1.88109 ],[-0.19323,1.047233,0.482803,0.960334]]) np.savetxt('new_array.txt',arr) #用loadtxt讀取,genfromtxt和loadtxt差不多,只不過它面向的是結構化數(shù)組和缺失數(shù)據(jù)處理。 a=np.loadtxt('new_array.txt') print a

總結

以上是生活随笔為你收集整理的numpy 相关函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。