numpy數(shù)組操作包括以下幾類:
修改數(shù)組形狀
反轉(zhuǎn)數(shù)組
修改數(shù)組維度
連接數(shù)組
分割數(shù)組
數(shù)組元素的添加與刪除
修改數(shù)組形狀
函數(shù)? ? ? ? ? ? ? ? ? ?描述
reshape? ? ? ? ? ? ? 不改變數(shù)據(jù)的條件下修改形狀
flat? ? ? ? ? ? ? ? ? ? ? ?數(shù)組元素迭代器
flatten? ? ? ? ? ? ? ? ? 返回一份數(shù)組拷貝汛聚,對拷貝所做的修改不會影響原始數(shù)組
ravel? ? ? ? ? ? ? ? ? ? ?返回展開數(shù)組
numpy.reshape
numpy.reshape函數(shù)可以在不改變數(shù)據(jù)的條件下改變形狀,格式如下:
numpy.reshape(arr,newshape,order='C)
arr:要修改形狀的數(shù)組
newshape:整數(shù)或者整數(shù)數(shù)組叠纷,新的形狀應(yīng)當(dāng)兼容原有形狀
order:‘C’按行款慨,‘A’原順序阳欲,‘k’元素在內(nèi)存中的出現(xiàn)順序临扮。
實(shí)例:
import numpyas np
a=np.arange(8)
print(a)
b=a.reshape(4,2)
print(b)
numpy.ndarray.flat是一個(gè)數(shù)組元素迭代器
實(shí)例:使用flat屬性迭代元素
import numpyas np
a=np.arange(9).reshape(3,3)
for rowin a:
print(row)
#使用flat屬性孤个,該屬性是一個(gè)數(shù)組元素迭代器:
for elementin a.flat:
print(element)
numpy.ndarray.flatten
numpy.ndarray.flatten返回一份數(shù)組拷貝剃允,對拷貝所做的修改不會影響原始數(shù)組,格式如下:
ndarray.flatten(order='C')
參數(shù)說明:
order:'C'按行齐鲤,‘F’按列斥废,‘A’原順序,‘K’元素在內(nèi)存中的出現(xiàn)順序
實(shí)例:
import numpyas np
a=np.arange(8).reshape(2,4)
print(a)
print(a.flatten())
print(a.flatten(order='F'))
numpy.ravel
numpy.ravel()展平的數(shù)組元素给郊,順序通常是“C風(fēng)格”牡肉,返回的是數(shù)組視圖(view,有點(diǎn)類似C/C++引用reference的意味),修改會影響原始數(shù)組淆九。
該函數(shù)接收兩個(gè)參數(shù):
numpy.ravel(a,order='C')
參數(shù)說明:
order:‘C’按行统锤,‘F’:按列,‘A’原順序炭庙,‘K’:元素在內(nèi)存中的出現(xiàn)順序饲窿。
實(shí)例:ravel應(yīng)用
import numpyas np
a=np.arange(8).reshape(2,4)
print(a)
b=a.ravel()
print(b)
c=a.ravel(order='F')
print(c)
翻轉(zhuǎn)數(shù)組
函數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? 描述
transpose? ? ? ? ? ? ? ? ? 兌換數(shù)組的維度
ndarray.T? ? ? ? ? ? ? ? ? ?和self.transpose()相同
rollaxis? ? ? ? ? ? ? ? ? ? ? ?向后滾動指定的軸
swapaxes? ? ? ? ? ? ? ? ? 兌換數(shù)組的兩個(gè)軸
numpy.transpose
numpy.transpose函數(shù)用于兌換數(shù)組的維度,格式如下:
numpy.transpose(arr,axes)
參數(shù)說明
arr:要操作的數(shù)組
axes:整數(shù)列表焕蹄,對應(yīng)維度逾雄,通常所有維度都會對換。
實(shí)例:respose應(yīng)用
import numpyas np
a=np.arange(8).reshape(2,4)
print(a)
print(np.transpose(a))
numpy.ndarray.T和numpy.transpose類似:
實(shí)例:numpy.ndarray.T的應(yīng)用
import numpyas np
a=np.arange(12).reshape(3,4)
print('原始數(shù)組:')
print(a)
print('轉(zhuǎn)置數(shù)組:')
print(a.T)
numpy.rollaxis
numpy.rollaxis函數(shù)向后滾動特定的軸到一個(gè)特定位置,格式如下:
numpy.rollaxis(arr,axis,start)
參數(shù)說明:
arr:數(shù)組
axis:要向后滾動的軸鸦泳,其它軸的相對位置不會改變
start:默認(rèn)為0银锻,表示完整的滾動。會滾動到特定位置做鹰。
實(shí)例:rollaxis的應(yīng)用
import numpyas np
a=np.arange(8).reshape(2,2,2)
print("原始數(shù)組是:")
print(a)
print('調(diào)用rollaxis函數(shù):')
print(np.rollaxis(a,2))
print('調(diào)用rollaxis函數(shù):')
print(np.rollaxis(a,2,1))
numpy.swapaxes
numpy.swapaxes函數(shù)用于交換數(shù)組的兩個(gè)軸徒仓,格式如下:
numpy.swapaxes(arr,axs1,axis2)
arr:輸入的數(shù)組
axis1:對應(yīng)第一個(gè)軸的整數(shù)
axis2:對應(yīng)第二軸的整數(shù)
實(shí)例:swapaxes的應(yīng)用
import numpyas np
a=np.arange(8).reshape(2,2,2)
print('原始數(shù)組是:')
print(a)
print('調(diào)用swapaxes函數(shù)后的數(shù)組:')
print(np.swapaxes(a,2,0))
修改數(shù)組維度
維度? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述
broadcast? ? ? ? ? ? ? ? ? ? ? ? ? ?產(chǎn)生模仿廣播的對象
broadcast_to? ? ? ? ? ? ? ? ? ? ? 將數(shù)組廣播到心形狀
expand_dims? ? ? ? ? ? ? ? ? ? ? 擴(kuò)展數(shù)組的形狀
squeeze? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從數(shù)組的形狀中刪除一維條目
實(shí)例:使用broadcast廣播
import numpyas np
x=np.array([[1],[2],[3]])
y=np.array([4,5,6])
b=np.broadcast(x,y)
print('對y廣播x:')
r,c=b.iters
print(next(r),next(c))
print(next(r),next(c))
print('廣播對象的形狀:')
print(b.shape)
#手動使用broadcast將x和y相加
c=np.empty(b.shape)
print('手動使用broadcast將x和y相加:')
print(c.shape)
c.flat=[u+vfor (u,v)in b]
print('調(diào)用flat函數(shù):')
print(c)
print('\n')
print('x與y的和:')
print(x+y)
numpy.broadcast_to
numpy.broadcast_to函數(shù)將數(shù)組廣播到新形狀。它在原始數(shù)組上返回只讀視圖誊垢。它通常不連續(xù)掉弛。如果新形狀不符合numpy的廣播規(guī)則,該函數(shù)可能會拋出valueError喂走。
numpy.broadcast_to(array,shape,subok)
實(shí)例:broadcast_to應(yīng)用
import numpyas np
a=np.arange(4).reshape(1,4)
print('原始數(shù)組:')
print(a)
print('調(diào)用broadcast_to函數(shù)后:')
print(np.broadcast_to(a,(4,4)))
numpy.expand_dims
numpy.expand_dims函數(shù)通過在指定位置插入新的軸來擴(kuò)展數(shù)組形狀殃饿,函數(shù)格式如下:
numpy.expand_dims(arr,axis)
參數(shù)說明:
arr:輸入數(shù)組
axis:新軸插入的位置
實(shí)例:維度不一插入
import numpyas np
x=np.array(([1,2],[3,4]))
print('數(shù)組x:')
print(x)
y=np.expand_dims(x,axis=0)
print('數(shù)組y:')
print(y)
print('數(shù)組x和數(shù)組y的維度:')
print(x.ndim,y.ndim)
print('數(shù)組x和數(shù)組y的形狀:')
print(x.shape,y.shape)
print('在位置1插入軸后的數(shù)組y:')
y=np.expand_dims(y,axis=1)
print(y)
print('x的形狀和y的形狀:')
print(x.shape,y.shape)
numpy.squeeze
numpy.squeeze函數(shù)從給定數(shù)組的形狀中刪除一維的條目,函數(shù)格式如下:
numpy.squeeze(arr,axis)
參數(shù)說明:
arr:輸入數(shù)組
axis:整數(shù)或者整數(shù)元組芋肠,用于選擇形狀中一維條目的子集
實(shí)例:
import numpyas np
x=np.arange(9).reshape(1,3,3)
print('數(shù)組X:')
print(x)
y=np.squeeze(x)
print('數(shù)組y:')
print(y)
print('數(shù)組x和y的形狀:')
print(x.shape,y.shape)
連接數(shù)組
函數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?描述
concatenate? ? ? ? ? ? ? ? ?連接沿現(xiàn)有軸的數(shù)組序列
stack? ? ? ? ? ? ? ? ? ? ? ? ? ? ?沿著新的軸加入一系列數(shù)組
hstack? ? ? ? ? ? ? ? ? ? ? ? ? ? 水平堆疊序列中的數(shù)組(列方向)
vstack? ? ? ? ? ? ? ? ? ? ? ? ? ? ?豎直堆疊序列中的數(shù)組(行方向)
numpy.concatenate
numpy.concatenate函數(shù)用于沿指定軸連接相同形狀的兩個(gè)或多個(gè)數(shù)組乎芳,格式如下:
numpy.concatenate((a1,a2,...),axis)
參數(shù)說明:
a1,a2,...相同類型的數(shù)組
axis:沿著它連接數(shù)組的軸,默認(rèn)為0
實(shí)例:
import numpyas np
a=np.array([[1,2],[3,4]])
print('數(shù)組a:')
print(a)
b=np.array([[5,6],[7,8]])
print('數(shù)組b:')
print(b)
print('沿軸0連接兩個(gè)數(shù)組:')
print(np.concatenate((a,b)))
print('沿軸1連接兩個(gè)數(shù)組:')
print(np.concatenate((a,b),axis=1))
numpy.stack
numpy.stack函數(shù)用于沿新軸鏈接數(shù)組序列帖池,格式如下:
numpy.stack(arrays,axis)
參數(shù)說明:
arrays相同形狀的數(shù)組序列
axis:返回?cái)?shù)組中的軸奈惑,輸入數(shù)組沿著它來堆疊
實(shí)例:
import numpyas np
a=np.array([[1,2],[3,4]])
print('數(shù)組a:')
print(a)
b=np.array([[5,6],[7,8]])
print('數(shù)組b:')
print(b)
print('沿軸0堆疊兩個(gè)數(shù)組:')
print(np.stack((a,b),0))
print('沿軸1堆疊兩個(gè)數(shù)組:')
print(np.stack((a,b),1))
numpy.hstack
numpy.hstack是numpy.stack函數(shù)的變體,它通過水平堆疊生成數(shù)組睡汹。
實(shí)例:
import numpyas np
a=np.array([[1,2],[3,4]])
print('第一個(gè)數(shù)組:')
print(a)
b=np.array([[5,6],[7,8]])
print('第二個(gè)數(shù)組:')
print(b)
print('水平堆疊:')
c=np.hstack((a,b))
print(c)
numpy.vstack
numpy.vstack是numpy.stack函數(shù)的變體肴甸,它通過垂直堆疊來生成數(shù)組
實(shí)例:
import numpyas np
a=np.array([[1,2],[3,4]])
print('數(shù)組a:')
print(a)
b=np.array([[5,6],[7,8]])
print('數(shù)組b:')
print(b)
print('垂直連接:')
c=np.vstack((a,b))
print(c)
分割數(shù)組
函數(shù)? ? ? ? ? ? ? ? ? ? ? ? 數(shù)組及操作
split? ? ? ? ? ? ? ? ? ? ? ? ?將一個(gè)數(shù)組分割為多個(gè)子數(shù)組
hsplit? ? ? ? ? ? ? ? ? ? ? ? ?將一個(gè)數(shù)組水平分割為多個(gè)子數(shù)組(按列)
vsplit? ? ? ? ? ? ? ? ? ? ? ? 講一個(gè)數(shù)組垂直分割為多個(gè)子數(shù)組(按行)
numpy.split
numpy.split函數(shù)沿特定的軸將數(shù)組分割為子數(shù)組,格式如下:
numpy.split(ary,indices_or_sections,axis)
參數(shù)說明:
ary:被分割的數(shù)組
indices_or_sections:果是一個(gè)整數(shù)囚巴,就用該數(shù)平均切分原在,如果是一個(gè)數(shù)組,為沿軸切分的位置(左開右閉)
axis:沿著哪個(gè)維度進(jìn)行切向彤叉,默認(rèn)為0庶柿,橫向切分。為1時(shí)秽浇,縱向切分浮庐。
實(shí)例:
import numpyas np
a=np.arange(9)
print('數(shù)組a:')
print(a)
print('將數(shù)組分為三個(gè)大小相等的子數(shù)組:')
b=np.split(a,3)
print(b)
print('將數(shù)組在一維數(shù)組中標(biāo)明的位置分割:')
b=np.split(a,[4,7])
print(b)
numpy.hsplit
numpy.hsplit函數(shù)用于水平分割數(shù)組,通過制定要返回的相同形狀的數(shù)組數(shù)量來拆分原數(shù)組柬焕。
實(shí)例:
import numpyas np
a=np.floor(10*np.random.random((2,6)))
print('數(shù)組a:')
print(a)
print('拆分后:')
print(np.hsplit(a,3))
numpy.vsplit
numpy.vsplit沿著垂直軸分割审残,其分割方式與hsplit用法相同
實(shí)例:
import numpyas np
a=np.arange(16).reshape(4,4)
print('數(shù)組a:')
print(a)
print('垂直分割:')
b=np.vsplit(a,2)
print(b)
數(shù)組元素的添加與刪除
函數(shù)? ? ? ? ? ? ? ? ? 元素及描述
resize? ? ? ? ? ? ? ? ? 返回指定形狀的新數(shù)組
numpy.resize(arr,shape)
參數(shù)說明:
arr:要修改大小的數(shù)組
shape:返回?cái)?shù)組的新形狀
實(shí)例:
import numpyas np
a=np.array([[1,2,3],[4,5,6]])
print('數(shù)組a:')
print(a)
print(a.shape)
b=np.resize(a,(3,2))
print('數(shù)組b:')
print(b)
print(b.shape)
b=np.resize(a,(3,3))
print(b)
numpy.append
numpy.append函數(shù)在數(shù)組的末尾添加值。追加操作會分配整個(gè)數(shù)組击喂,并把原來的數(shù)組賦值到新數(shù)組中维苔。此外碰辅,輸入數(shù)組的維度必須匹配否則將生成valueerror懂昂。
append函數(shù)返回的始終是一個(gè)一維數(shù)組
numpy.append(arr,values,axis=None)
參數(shù)說明:
arr:輸入數(shù)組
values:要向arr添加的值,需要和arr形狀相同(除了要添加的軸)
axis:默認(rèn)為None没宾。當(dāng)axis無定義時(shí)凌彬,是橫向加成沸柔,返回總是為一維數(shù)組,當(dāng)axis有定義的時(shí)候铲敛,分別為0和1的時(shí)候褐澎。當(dāng)axis有定義的時(shí)候,分別為0和1的時(shí)候(列數(shù)要相同)伐蒋。當(dāng)axis為1時(shí)工三,數(shù)組是加在右邊(行數(shù)要相同)
實(shí)例:
import numpyas np
a=np.array([[1,2,3],[4,5,6]])
print('第一個(gè)數(shù)組:')
print(a)
print('向數(shù)組添加元素:')
print(np.append(a,[7,8,9]))
print('沿軸0添加元素:')
print(np.append(a,[[7,8,9]],axis=0))
print('沿軸1添加元素:')
print(np.append(a,[[5,5,5],[7,8,9]],axis=1))
numpy.insert
numpy.insert函數(shù)在給定索引之前,沿給定軸在輸入數(shù)組中插入值先鱼。
如果值的類型轉(zhuǎn)換為要插入俭正,則它與輸入數(shù)組不同。插入沒有原地焙畔,函數(shù)會返回一個(gè)新數(shù)組掸读。此外,如果未提供軸宏多,則輸入數(shù)組會被展開儿惫。
numpy.insert(arr,obj,values,axis)
參數(shù)說明:
arr:輸入數(shù)組
obj:在其之前插入值的索引
values:要插入的值
axis:沿著它插入的軸,如果未提供伸但,則輸入數(shù)組會被展開
實(shí)例:
import numpyas np
a=np.array([[1,2],[3,4],[5,6]])
print('數(shù)組a:')
print(a)
print('未傳遞axis參數(shù)肾请。在插入之前輸入數(shù)組會被展開。')
print(np.insert(a,3,[11,12]))
print('傳遞了axis參數(shù)更胖。會廣播數(shù)組來配輸入數(shù)組筐喳。')
print('沿軸0廣播:')
print(np.insert(a,1,[11],axis=0))
print('沿軸1廣播:')
print(np.insert(a,1,11,axis=1))
numpy.delete
numpy.delete函數(shù)返回從輸入數(shù)組中刪除指定子數(shù)組的新數(shù)組。與insert(函數(shù)的情況一樣函喉,如果未提供軸參數(shù)避归,則輸入數(shù)組將展開。)
numpy.delete(arr,obj,axis)
arr:輸入數(shù)組
obj:可以切片管呵,整數(shù)或者整數(shù)數(shù)組梳毙,表明要從輸入數(shù)組刪除的子數(shù)組
axis:沿著它刪除給定子數(shù)組的軸,如果未提供捐下,則輸入數(shù)組會被展開
實(shí)例:
import numpyas np
a=np.arange(12).reshape(3,4)
print('數(shù)組a:')
print(a)
print('未傳遞axis參數(shù)账锹,在插入之前輸入數(shù)組會被展開:')
print(np.delete(a,5))
print('刪除第二列:')
print(np.delete(a,1,axis=1))
print('包含從數(shù)組中刪除的替代值的切片:')
a=np.array([1,2,3,4,5,6,7,8,9,10])
print(np.delete(a,np.s_[::2]))
numpy.unique
numpy.unique函數(shù)用于去除數(shù)組中的重要元素
numpy.unique(arr,return_index,return_inverse,return_counts)
arr:輸入數(shù)組,如果不是一維數(shù)組則會展開
return_index:如果為true坷襟,返回新列表元素在舊列表中的位置(下標(biāo))奸柬,并以列表形式存儲
return_inverse:如果為true,返回舊列表元素在新列表中的位置(下標(biāo))婴程,并以列表形式存儲
return_counts:如果為true廓奕,返回去重?cái)?shù)組中的元素在原數(shù)組中的出現(xiàn)次數(shù)
實(shí)例:
import numpyas np
a=np.array([5,2,6,2,7,5,6,8,2,9])
print('數(shù)組a:')
print(a)
print('第一次去重:')
u=np.unique(a)
print(u)
print('去重?cái)?shù)組的索引數(shù)組:')
u,indices=np.unique(a,return_index=True)
print(indices)
print('可以看到每個(gè)和原數(shù)組下標(biāo)對應(yīng)的數(shù)值:')
print(a)
print('去重?cái)?shù)組的下標(biāo):')
u,indices=np.unique(a,return_inverse=True)
print(u)
print('下標(biāo)為:')
print(indices)
print('使用下標(biāo)重構(gòu)原數(shù)組:')
print(u[indices])
print('返回去重元素的重復(fù)數(shù)量:')
u,indices=np.unique(a,return_counts=True)
print(u)
print(indices)