掌握numpy(一)
目錄##
掌握numpy(一)
掌握numpy(二)
掌握numpy(三)
掌握numpy(四)
NumPy是一款用于科學計算的python包,強大之處在于矩陣的運算以及包含豐富的線性代數運算的支持。本文將對numpy一些常用的用法進行講解,一來是對自己的知識進行梳理,二來作為一份備忘錄供以后查閱,如果有幸被你讀到,通過閱讀本文希望對你有幫助。由于本人能力有限,如果有錯誤請指出~
創建數組##
首先我們要先引入numpy,常用的引入方法為
import numpy as np
np.zeros###
該方法能夠創建一個全為0的數組
>>np.zeros(5)
array([ 0., 0., 0., 0., 0.])
上面是創建一個1維的數組,創建一個多維的數組也很簡單,eg下面是創建一個二維的數組
>>a = np.zeros((3,4))
>>a
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
在上面的例子里面,每一個維度被成為軸(axis)
當定義了一個array的時候,我們可以查看其形狀
>>a.shape
(3L, 4L)
還有查看該數組種元素的個數
>>a.size
12
在numpy種,數組類型有著其封裝好的數據類型ndarray:
>>type(a)
numpy.ndarray
N維度數組###
當然,我們還可以定義更高維度的數組,eg:下面我們定義一個3D 數組
>>np.zeros((2,3,4))
array([[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
np.ones###
與前面講的zeros類似,這是創建一個全為1的數組
>>np.ones((3,4))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
np.full###
創建一個數組,并由給定的數值進行初始化
>>np.full((3,4),np.pi)
array([[ 3.14159265, 3.14159265, 3.14159265, 3.14159265],
[ 3.14159265, 3.14159265, 3.14159265, 3.14159265],
[ 3.14159265, 3.14159265, 3.14159265, 3.14159265]])
np.empty###
這個又是什么意思呢?創建一個未初始化的數組,里面的值全部隨機
>>np.empty((2,2))
array([[ 2.96206109e-316, 2.42711804e-316],
[ 1.85335328e-316, 1.85335328e-316]])
np.array###
如何將python原生的list對象轉化為numpy的array呢
>>np.array([1,2,3,4])
array([1, 2, 3, 4])
np.arange###
numpy還提供了類似python的range方法
>>np.arange(1,5)
array([1, 2, 3, 4])
當然我們還可以設置迭代的步長
>>np.arange(1,5,0.5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
np.linspace###
該方法的作用是將一組值,以相同的間隔,迭代給定的次數
>>np.linspace(1,10,4)
array([ 1., 4., 7., 10.])
np.rand 和np.randn###
numpy提供了一系列的隨機方法來隨機初始化數組,下面是使用uniform distribution來隨機初始化數組(取值范圍[0,1])
>>np.random.rand(3,4)
array([[ 0.1017882 , 0.96519783, 0.899528 , 0.62844884],
[ 0.63758273, 0.71036901, 0.76895382, 0.41230372],
[ 0.31258595, 0.90595397, 0.44213312, 0.33604536]])
還可以使用normal distribution方法來初始化數組,均值為0、方差為1
>>np.random.randn(3,4)
array([[ 0.05971094, 1.57336808, -0.56372917, 1.58623654],
[-0.82797012, 0.19435163, 1.64495295, 0.07486049],
[-0.97815692, 1.4891987 , 0.65185811, -0.53984805]])
為了更加直觀的表示上面的函數,將使用matplotlib將其繪制出來
import matplotlib.pyplot as plt
plt.hist(np.random.rand(100000), normed=True, bins=100, histtype="step", color="blue", label="rand")
plt.hist(np.random.randn(100000), normed=True, bins=100, histtype="step", color="red", label="randn")
plt.axis([-2.5, 2.5, 0, 1.1])
plt.legend(loc = "upper left")
plt.title("Random distributions")
plt.xlabel("Value")
plt.ylabel("Density")
plt.show()
np.fromfunction###
有些時候,單一的數組初始化方式不能滿足我們的業務需求,這個時候我們就需要定制初始化規則,強大的numpy當然也會考慮到這一問題
def my_function(x,y,z):
return x * y + z
a = np.fromfunction(my_function, (2,3,4))
>>a
array([[[ 0., 1., 2., 3.],
[ 0., 1., 2., 3.],
[ 0., 1., 2., 3.]],
[[ 0., 1., 2., 3.],
[ 1., 2., 3., 4.],
[ 2., 3., 4., 5.]]])
上面得到的數組是怎么一個計算過程呢?首先numpy將數組種的坐標點帶入自定義的函數種,例如右下角的5坐標點為(1,2,3)將其坐標代入自定義函數
數組中的數值##
dtype###
上一節將了使用numpy創建數組類型為ndarray,那么數組中的數據也有著自己的數據類型.
>>c = np.arange(1, 5)
c.dtype #int32
data buffer###
數組以一維度byte buffer存放在內存中,可以通過data屬性來進行查看
先定義一個數組
>>f = np.array([[1,2],[1000, 2000]], dtype=np.int32)
f.data
<read-write buffer for 0x000000000BB03F30, size 16, offset 0 at 0x000000000C4DCEA0>
python2和3的查看方式不一樣
if (hasattr(f.data, "tobytes")):
data_bytes = f.data.tobytes() # python 3
else:
data_bytes = memoryview(f.data).tobytes() # python 2
>>data_bytes
'x01x00x00x00x02x00x00x00xe8x03x00x00xd0x07x00x00'
總結
以上是生活随笔為你收集整理的掌握numpy(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终端分屏复用工具 tmux 基本操作教程
- 下一篇: transform你不知道的那些事