學習鏈接:http://www.runoob.com/numpy/numpy-tutorial.html
官方鏈接:https://numpy.org/devdocs/user/quickstart.html
簡介:
numPy是python語言的一個擴展庫,是一個運行非常快的數學庫,主要用於數組計算。它支持大量的維度與數據運算還針對數組運算提供大量的數學函數庫。它包含:一個強大的n維數組對象ndarray、廣播功能函數、整合c/c++/fortran的工具、線性代數、傅里葉變化與隨機數生成等功能
numPy應用
numpy通常與SciPy(Scientific Python)和Matplotlib(繪圖庫)配合使用,來代替MatLab,構成為強大的科學計算環境,幫助我們通過Python學習數據科學或者機器學習
安裝:
$pip install numPy
測試安裝成功:
>>> from numpy import * #導入numpy庫 >>> eye(4) #生成對角矩陣 array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])
使用
*)numpy.linspace()
參考鏈接:https://numpy.org/devdocs/reference/generated/numpy.linspace.html?highlight=linspace#numpy.linspace
像python中的range一般,返回有指定的間隔產生的均勻間隔的數組,值得注意的是有dtype這個參數
*)numpy. arange()
參考鏈接:https://numpy.org/devdocs/reference/generated/numpy.arange.html?highlight=arange#numpy.arange
值在半開區間里被生成[start,stop),對於int類型的參數,函數等同於python中的range,但是返回一個ndarray而不是list
但是對於非整形的step參數,每次返回的結果往往不一致,對於這種情況,選擇numpy.linspace()更好
*)numpy.zeros()
參考鏈接:https://numpy.org/devdocs/reference/generated/numpy.zeros.html?highlight=zeros#numpy.zeros
返回由0填充的數組,能指定填充的0的dtype
*)numpy.column_stack()
將一系列的1-D(我認為是1維)arrays堆疊為column以此來將他們轉化為一個2維array,二維數組被堆疊為和原來的一樣
*)
*)list to array
參考鏈接:https://docs.scipy.org/doc/numpy/reference/generated/numpy.asarray.html
>>> a = [1, 2] >>> np.asarray(a) array([1, 2])
numpy random模塊參考鏈接:https://www.cnblogs.com/hhh5460/p/4324967.html#top(官方文檔翻譯)
*)np.random.randint(low[,high,size,dtype])
參考鏈接:https://www.jianshu.com/p/36a4bbb5536e
>>> np.random.randint(0,20,4) array([ 1, 9, 17, 11]) >>> np.random.randint(0,20,[4,1])#結果中包含4個數組,每個一個 array([[16], [19], [ 5], [ 9]]) >>> np.random.randint(0,20,[4]) array([ 4, 6, 11, 14]) >>> np.random.randint(0,20,4,1) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "mtrand.pyx", line 973, in mtrand.RandomState.randint TypeError: data type not understood
1)np.random.normal()生成高斯分布的概率密度隨機數
參考鏈接:https://blog.csdn.net/qiqiaiairen/article/details/52505667
這個方法返回一個正態分布的數組?(正態分布、又稱高斯分布、鍾形曲線)
numpy.random.normal(loc=0.0, scale=1.0, size=None)
參數含義:
loc:(float類型)概率分布的均值,是對應於整個分布的中心而言
scale:(float類型)概率分布的標准差(標准差反應集合內個體的離散程度,越大越離散),對應於分布的寬度而言(即高度一定?),scale越大越矮胖,scale越小越瘦高
size:(int or tuple of ints類型)輸出的shape(?),默認為None,只輸出一個值
這個方法返回一個正態分布的數組
>>> numpy.random.normal(0,1,20) array([-0.98305884, -0.79340779, 0.69865242, 1.10930775, 0.17458143, 0.88452427, 0.92862304, -1.27837941, -0.88772762, 0.86100981, 3.06262977, 1.66589188, -1.34269035, -0.13672729, 0.01154996, -1.88304306, 0.35375017, -0.88784919, 2.77849309, 0.68915905])
2)np.range與range
range是python自帶的庫
參考鏈接:https://blog.csdn.net/lanchunhui/article/details/49493633
三個參數(S,E,Step_size)第一個參數是起點,第三個是步長,返回一個不包括第二個參數的數據序列
numpy里的數據類型、數據類型對象dtype
參考鏈接:https://www.runoob.com/numpy/numpy-dtype.html
numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應上,其中部分類型對應為 Python 內置的類型。詳情見參考鏈接
數據類型對象 (dtype)
dtype是用來描述與數組對應的內存區域如何使用(懵逼,不只有一種使用方法嗎?)這依賴如下幾個方面:
- 數據的類型(整數,浮點數或者 Python 對象)
- 數據的大小(例如, 整數使用多少個字節存儲)
- 數據的字節順序(小端法或大端法)
字節順序是通過對數據類型預先設定"<"或">"來決定的。"<"意味着小端法(最小值存儲在最小的地址,即低位組放在最前面)。">"意味着大端法(最重要的字節存儲在最小的地址,即高位組放在最前面)。
- 在結構化類型的情況下,字段的名稱、每個字段的數據類型和每個字段所取的內存塊的部分
- 如果數據類型是子數組,它的形狀和數據類型
dtype 對象是使用以下語法構造的:
numpy.dtype(object, align, copy)
- object - 要轉換為的數據類型對象
- align - 如果為 true,填充字段使其類似 C 的結構體。(繼續懵逼)
- copy - 復制 dtype 對象 ,如果為 false,則是對內置數據類型對象的引用
創建dtype的例子:
>>> dt=np.dtype(np.int32)# 使用標量類型#不要忘記前面的np. >>> print(dt) int32#直接輸出的這個 >>>
之后有列舉了一些創建dtype的其他實例,介紹了一些特殊的格式如:
int8, int16, int32, int64 四種數據類型可以使用字符串 'i1', 'i2','i4','i8' 代替
特殊的有一個字節順序標注的
import numpy as np # 字節順序標注 dt = np.dtype('<i4') print(dt)
#結果
int32
之后又展示了結構化數據類型的創建
# 類型字段名可以用於存取實際的 age 列 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age']) #結果: [10 20 30]
問題
因為上面哪個“dtype是用來描述與數組對應的內存區域如何使用”的疑惑還沒有解決,而且在后面我也沒有看到dtype是怎樣使用的,只是輸出了int32之類的東西,難道上面哪一個“結構化”是使用,
而且numpy的一些方法如numpy.linspace()又dtype這個參數,我也不知道有什么用。