更新時間:2021年12月09日10時15分 來源:傳智教育 瀏覽次數(shù):
ndarray對象提供了一些可以便捷地改變數(shù)組基礎(chǔ)形狀的屬性和方法,例如,將一個3行4列的二維數(shù)組轉(zhuǎn)換成6行2列的二維數(shù)組,關(guān)于這些屬性和方法的具體說明如表9-3所示。
上述這些方法都能夠改變數(shù)組的形狀,但是,reshape()、ravel()方法和T屬性返的都是一個已經(jīng)修改的新數(shù)組,并不會修改原始數(shù)組。例如:
>>> import numpy as np >>> arr = np.array([[1, 2, 3], [4, 5, 6]]] #創(chuàng)建一個2行3列的數(shù)組 >>> arr array([[1, 2, 3], [4,5,6]]) >>> new_arr = arr.reshape((3, 2)) #返回維度為(3,2)的數(shù)組 >>> new arr array([[1, 2], [3,4], [5,6]]) >>> arr.ravel() #對數(shù)組進(jìn)行降維處理 array([1, 2, 3, 4, 5, 6]) >>> arr.T #對數(shù)組進(jìn)行軸對換 array([[1, 4], [2,5], [3,6]]) >>> arr #查看原始數(shù)組是否發(fā)生變化 array([[1, 2, 3], [4,5,6]])
numpy數(shù)組制樣支持索引和切片操作,具體的用法與序列類型相似。例如:
>>>arr = np.arange(1,9).reshape((4,22)) #生成4行2列的數(shù)組 >>> arr array([[1, 2], [3,4], [5,6], [7,8]]) >>> arr[2] #獲取第2行數(shù)據(jù) array([5, 6]) >>> arr[1:3] #獲取第1~2行數(shù)據(jù) array([[3, 4], [5,6]])
除此之外,numpy中提供了一批具有基本數(shù)學(xué)運(yùn)算功能的函數(shù),如表9-4所示。
表9-4 numpy模塊的算術(shù)運(yùn)算函數(shù)
表9-4中列舉的所有運(yùn)算函數(shù)的參數(shù)y都是可選的,如果指定了參數(shù)y,結(jié)果將被保存到y(tǒng)中,比如np.add(a,b,a)表示a+=b;如果沒有指定參數(shù)y,結(jié)果將被保存到一個新創(chuàng)建的數(shù)組中,比如c=np.add(a,b)表示c=a+b。
數(shù)組無須循環(huán)遍歷便可以對每個元素執(zhí)行批量的算術(shù)操作,也就是說形狀相同的數(shù)組之間執(zhí)行算術(shù)運(yùn)算時,會應(yīng)用到位置相同的元素上進(jìn)行計算。例如,數(shù)組a=[1,2,3]和數(shù)組b=[4,5,6],a*b所得的結(jié)果為1*4、2*5和3*6組成的一個新數(shù)組。若兩個數(shù)組的基礎(chǔ)形狀不同,numpy可能會觸發(fā)廣播機(jī)制,該機(jī)制需要滿足以下任一條件。
(1)數(shù)組在某維度上元素的長度相等。
(2)數(shù)組在某維度上元素的長度為1。
廣播機(jī)制描述了numpy如何在算術(shù)運(yùn)算期間處理具有不同形狀的數(shù)組,較小的數(shù)組被“廣播”到較大的數(shù)組中,使得它們具有兼容的形狀。例如:
>>> a= np.array([1, 2, 3])
>>> b = np.array([4,5, 6])
>>>a+b # 形狀相同的數(shù)組進(jìn)行求和運(yùn)算
array([5, 7, 9])
>>> c = np.array([[7,8,9],[10,11,12]])
>>>a+c # 形狀不同的數(shù)組進(jìn)行求和運(yùn)算
array([[ 8, 10, 12],
[11, 13, 15]])
numpy模塊還包括線性代數(shù)、隨機(jī)和概率分布、基本數(shù)值統(tǒng)計運(yùn)算、傅里葉變換等豐富的功能,欲了解更多功能,讀者可以到numpy官網(wǎng)查詢學(xué)習(xí)。
NumPy常用的數(shù)據(jù)類型有哪些?怎樣進(jìn)行轉(zhuǎn)換?