目錄
1.數組對象基礎
ndarray
是NumPy的核心功能,其含義是:n-dimensional array,即多維數組。在Python中萬物皆對象
,數組也是一個對象,數組是NumPy的一個重要數據結構。
2.初識數組對象
在Jupyter中查看NumPy的版本(按shift + enter即可運行代碼)
import numpy as np
np.__version__
輸出結果如下:
2.1 創建第一個數組
In [2]: data = np.array([1, 2, 3, 4, 5, 6])
In [3]: data
Out[3]: array([1, 2, 3, 4, 5, 6])
In [4]: type(data)
Out[4]: numpy.ndarray
小提示:此處可以使用dir(data)查看數組對象的屬性和方法。如果使用data?可以打開數組的官方文檔
2.2 數組元素的類型dtype
# dtype可以查看數組元素的類型
In [9]: data.dtype
Out[9]: dtype('int32')
從輸出結果得出數組元素的類型為int32,即32位的整數。
數組元素類型的改變
In [18]: new_data = data.astype(np.float)
In [19]: new_data.dtype
Out[19]: dtype('float64')
In [20]: data, data.dtype
Out[20]: (array([1, 2, 3, 4, 5, 6]), dtype('int32'))
In [21]: new_data
Out[21]: array([1., 2., 3., 4., 5., 6.])
數組data相對於new_data只有數組元素類型不同
2.2 數組的外貌
(1)shape可以查看數組的形狀
In [22]: data2 = np.array([1, 2, 3, 4])
In [23]: data2.shape
Out[23]: (4,)
返回結果表示是一維數組。
(2)ndim返回數組的維度
In [24]: data2.ndim
Out[24]: 1
(3) size返回數組元素的個數
In [25]: data2.size
Out[25]: 4
NumPy常用數組對象屬性表
屬性 | 說明 |
---|---|
dtype | 返回數組元素的類型 |
shape | 返回由整數組成的元組,元組中的每個整數依次對應數組的每個軸的元素個數 |
size | 返回一個整數,代表數組元素中的個數 |
ndim | 返回一個整數,代表數組軸的個數,即維度 |
nbytes | 返回一個整數,代表用於保存數組的字節數 |
小提示:可以通過help(data2.dtype)或者data2.dtype?查看幫助文檔
3.數組的創建方法
3.1 基本方法
# 一維數組創建
In [31]: np.array([1, 2, 3, 4, 5], dtype=float)
Out[31]: array([1., 2., 3., 4., 5.])
# 多維數組創建
# 通過嵌套列表創建的數組就是多維數組
In [33]: np.array([[1, 2, 3],[10, 20, 30],[100, 200, 300]])
Out[33]:
array([[ 1, 2, 3],
[ 10, 20, 30],
[100, 200, 300]])
# 注意:嵌套列表的每個元素的長度與類型都必須一致
(3)指定維度創建
# ndmin指定最小維度數
In [39]: data3 = np.array([1, 2, 3, 4, 5, 6, 7, 8], ndmin=2)
In [40]: data3.shape
Out[40]: (1, 8)
3.2 用函數創建數組
In [41]: np.zeros((2,10))
Out[41]:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
此處的np.zeros()能夠創建一個完全由0組成的數組,(2,10)是以元組形式聲明該數組的形狀
NumPy中創建特殊數組的函數
函數 | 說明 |
---|---|
asarray | 輸入參數為列表、元組,或者由他們組成的嵌套對象或數組,返回一個數組。如果參數是數組,則返回該數組本身 |
arange | 根據開始值、結束值和步長創建一個數組 |
ones、ones_like | ones根據指定的形狀和元素類型,創建元素值為1的數組。ones_like創建一個與某指定數組完全一樣但元素值是1的數組 |
zeros、zeros_like | 與上述相同,只不過元素是0 |
empty、empty_like | 與上述相同,只不過沒有填充任何元素數據,但分配了內存空間 |
eye、identity | 創建對角線元素是1、其他元素是0的二維數組 |
diag | 創建對角線元素是指定值,其余元素是0的二維數組 |
linspace | 根據開始值、結束值和元素數量創建元素是等差數列的數組 |
logspace | 根據開始值、結束值和元素數量和對數底創建元素是等比數列的數組 |
3.3 創建自定義類型的數組
In [67]: my_type = np.dtype([('name',str, 20),('age',np.int8),('salary', np.float32)])
In [68]: items = np.array([('Jack',18,1000.00),('Lucy',19,2000.00)], dtype=my_type)
In [69]: print(items.dtype)
[('name', '<U20'), ('age', 'i1'), ('salary', '<f4')]
3.4 form系列的函數創建數組
創建9*9乘法結果表數組
In [74]: np.fromfunction(lambda i, j:(i+1)*(j+1), (9, 9), dtype=np.int)
Out[74]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[ 2, 4, 6, 8, 10, 12, 14, 16, 18],
[ 3, 6, 9, 12, 15, 18, 21, 24, 27],
[ 4, 8, 12, 16, 20, 24, 28, 32, 36],
[ 5, 10, 15, 20, 25, 30, 35, 40, 45],
[ 6, 12, 18, 24, 30, 36, 42, 48, 54],
[ 7, 14, 21, 28, 35, 42, 49, 56, 63],
[ 8, 16, 24, 32, 40, 48, 56, 64, 72],
[ 9, 18, 27, 36, 45, 54, 63, 72, 81]])