Python——ndarray多維數(shù)組基本操作(1)

1.數(shù)組算術(shù):

數(shù)組允許進(jìn)行批量操作而無需使用for循環(huán),因此更加簡便,這種特性也被稱為向量化。任何兩個等尺寸之間的算術(shù)操作都應(yīng)用逐元素操作的方式進(jìn)行。

import numpy as np

arr1 = np.array([[1,2,3,4],[9,8,7,6]])

arr2 = np.array([[4,3,2,1],[6,7,8,9]])

arr1 + arr2
Out[4]: 
array([[ 5,  5,  5,  5],
       [15, 15, 15, 15]])

arr1 * arr2
Out[5]: 
array([[ 4,  6,  6,  4],
       [54, 56, 56, 54]])

1 / arr1
Out[6]: 
array([[1.        , 0.5       , 0.33333333, 0.25      ],
       [0.11111111, 0.125     , 0.14285714, 0.16666667]])

arr2 * 0.8
Out[7]: 
array([[3.2, 2.4, 1.6, 0.8],
       [4.8, 5.6, 6.4, 7.2]])

同尺度數(shù)組之間的比較,會產(chǎn)生一個布爾型數(shù)組。

arr1 > arr2
Out[8]: 
array([[False, False,  True,  True],
       [ True,  True, False, False]])

上述操作均是在同尺度數(shù)組之間進(jìn)行的,對于不同尺度數(shù)組間的操作,會使用到廣播特性。

2.數(shù)組索引與切片:

索引:獲取數(shù)組中特定位置元素的過程;
切片:獲取數(shù)組元素子集的過程。

  • 一維數(shù)組的索引和切片:與python的列表類似
image
  • 多維數(shù)組的索引:
image
  • 多維數(shù)組的切片:
image

3.數(shù)組的變換:

  • ndarray數(shù)組的維度變換方法:
函數(shù) 說明
.reshape(shape) 不改變數(shù)組元素,返回一個shape形狀的數(shù)組,原數(shù)組不變
.resize(shape) 與.reshape()功能一致,但修改原數(shù)組
.swapaxes(ax1,ax2) 將數(shù)組n個維度中兩個維度進(jìn)行調(diào)換
.flatten() 對數(shù)組進(jìn)行降維,返回折疊后的一維數(shù)組,原數(shù)組不變
a = np.ones((2,3,4),dtype=np.int32)

a
Out[10]: 
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]]])

a.reshape((3,8))
Out[11]: 
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]])

a
Out[12]: 
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]]])

a.resize((3,8))

a
Out[14]: 
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]])

a.flatten()
Out[15]: 
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])

a
Out[16]: 
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]])
  • ndarray數(shù)組的類型變換方法:

new_a = a.astype(new_type)

astype()方法一定會創(chuàng)建新的數(shù)組(原始數(shù)據(jù)的一個拷貝),即使兩個類型一致。

a = np.ones((2,3,4),dtype=np.int32)

a
Out[18]: 
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]]])

b = a.astype(np.float)

b
Out[20]: 
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.]]])
  • ndarray數(shù)組向列表的轉(zhuǎn)換:

ls = a.tolist()

a = np.full((2,3,4),25,dtype=np.int32)

a
Out[22]: 
array([[[25, 25, 25, 25],
        [25, 25, 25, 25],
        [25, 25, 25, 25]],

       [[25, 25, 25, 25],
        [25, 25, 25, 25],
        [25, 25, 25, 25]]])

a.tolist()
Out[23]: 
[[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]],
 [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]

4.數(shù)組轉(zhuǎn)置與換軸:

轉(zhuǎn)置是一種特殊的數(shù)據(jù)重組形式,可以返回底層數(shù)據(jù)的視圖而不需要復(fù)制任何內(nèi)容。
數(shù)組擁有transpose方法,也有特殊的T屬性。

arr = np.arange(15).reshape((3,5))

arr
Out[33]: 
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

arr.transpose
Out[34]: <function ndarray.transpose>

arr.T
Out[35]: 
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

對于更高緯度的數(shù)組,transpose方法可以接受包含軸編號的元組,用于轉(zhuǎn)置軸。

arr = np.arange(16).reshape((2,2,4))

arr
Out[37]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

# 下面的操作是將原來的第二個軸變?yōu)榈谝粋€,原來的第一個軸變?yōu)榈诙€軸,最后一個軸不變
arr.transpose((1,0,2))
Out[38]: 
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

ndarray的swapaxes方法,通過接受一對軸編號作為參數(shù),并對軸進(jìn)行調(diào)整用于重組數(shù)據(jù)。
swapaxes方法返回的是數(shù)據(jù)的視圖,而沒有對數(shù)據(jù)進(jìn)行復(fù)制。

arr = np.arange(16).reshape((2,2,4))

arr
Out[44]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

arr.swapaxes(1,2)
Out[45]: 
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

arr.shape
Out[46]: (2, 2, 4)

arr.swapaxes(1,2).shape
Out[47]: (2, 4, 2)

Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容