日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

掌握numpy(一)

發(fā)布時間:2023/12/13 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 掌握numpy(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄##

掌握numpy(一)
掌握numpy(二)
掌握numpy(三)
掌握numpy(四)
NumPy是一款用于科學計算的python包,強大之處在于矩陣的運算以及包含豐富的線性代數運算的支持。本文將對numpy一些常用的用法進行講解,一來是對自己的知識進行梳理,二來作為一份備忘錄供以后查閱,如果有幸被你讀到,通過閱讀本文希望對你有幫助。由于本人能力有限,如果有錯誤請指出~

創(chuàng)建數組##

首先我們要先引入numpy,常用的引入方法為

import numpy as np

np.zeros###

該方法能夠創(chuàng)建一個全為0的數組

>>np.zeros(5)
array([ 0.,  0.,  0.,  0.,  0.])

上面是創(chuàng)建一個1維的數組,創(chuàng)建一個多維的數組也很簡單,eg下面是創(chuàng)建一個二維的數組

>>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類似,這是創(chuàng)建一個全為1的數組

>>np.ones((3,4))
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])

np.full###

創(chuàng)建一個數組,并由給定的數值進行初始化

>>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###

這個又是什么意思呢?創(chuàng)建一個未初始化的數組,里面的值全部隨機

>>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###

有些時候,單一的數組初始化方式不能滿足我們的業(yè)務需求,這個時候我們就需要定制初始化規(guī)則,強大的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###

上一節(jié)將了使用numpy創(chuàng)建數組類型為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(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。