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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy二维数组改变某些数_【每天15分钟,5天学会NumPy】第1天:基本概念

發布時間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy二维数组改变某些数_【每天15分钟,5天学会NumPy】第1天:基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.NumPy 的家族

NumPy 是 SciPy 家族的一員,而且是最重要的成員。SciPy 家族(見下圖)是一個專門應用于數學、科學和工程領域的開源的Python生態圈。NumPy 最初是 SciPy 的一部分,后來獨立出來了。SciPy 家族的主體,可以概括為 MSN 這三個字母,你要是喜歡足球的話,一定會聯想到巴薩的梅西、蘇亞雷斯和內馬爾這個MSN三劍客組合。我喜歡把 Matplotlib 、 SciPy 和 NumPy 叫做 MSN 組合,并專門寫了一篇博文,名字就叫《數學建模三劍客MSN》。

NumPy 的安裝,非常簡單,直接使用pip命令安裝即可。通常,安裝 NumPy 的時候,也會順便安裝 SciPy 模塊、matplotlib 模塊。

> PS D:\>python –m pip install numpy> PS D:\>python –m pip install scipy> PS D:\>python –m pip install matplotlib

使用 NumPy 時,我們習慣把它簡寫成 np。提醒大家注意:pip 命令需要在命令行窗口中運行,而不是在下圖所示的 IDEL 窗口中。在 IDEL 窗口中可以交互式執行 Python 語句,是學習 Python 的有力工具。

2.NumPy 是數據處理和科學計算的基礎

NumPy 是 Python 科學計算的基礎軟件包,提供了多維數組對象,多種派生對象(掩碼數組、矩陣等)以及用于快速操作數組的函數及 API,它包括數學、邏輯、數組形狀變換、排序、選擇、I/O 、離散傅立葉變換、基本線性代數、基本統計運算、隨機模擬等等。和 Python 的列表相比,NumPy 擁有明顯的速度優勢。NumPy底層使用C語言編寫,內置了并行運算功能,并且內部解除了GIL(全局解釋器鎖)。這意味著:
  • 其對數組的操作速度不受Python解釋器的限制
  • 當系統有多個CPU時,NumPy可以自動并行計算
NumPy的數據組織結構,尤其是數組(numpy.ndarray),幾乎已經成為所有數據處理與機器學習的標準數據結構了。越來越多的基于 Python 的機器學習和數據處理軟件包使用 NumPy 數組,雖然這些工具通常都支持 python 的原生數組(即列表——在不沖突的前提下,我可能會混用數組和列表)作為參數,但它們在處理之前會還是會將輸入的數組轉換為 NumPy 數組,而且也通常輸出為 NumPy 數組。在 Python 的圈子里,NumPy 的重要性和普遍性日趨增強。換句話說,為了高效地使用當今機器學習和數據處理等基于 Python 的工具包,你只知道如何使用 Python 的原生數組是不夠的,還需要知道如何使用 NumPy 數組。

上面這一張圖,展示的是 Python 旗下用于圖像視覺處理、2D繪圖、3D渲染、數據處理、機器學習等領域比較有名的5個工具模塊,都深度依賴 NumPy 數組??梢哉f,沒有NumPy的基礎,任何人都很難用好上述這5個工具庫。
  • OpenCV:目前以人臉識別、自動駕駛等技術為代表的人工智能方興未艾,其背后的圖像和視覺處理,幾乎都離不開 OpenCV,而 OpenCV 庫中圖像的數據結構,從 CV2 之后,全面轉向了 NumPy,用 OpenCV 打開圖像文件,得到的就是 NumPy 數組
  • OpenGL:在三維領域大名鼎鼎的OpenGL,更是深度依賴NumPy,如果沒有NumPy,我們無法想象如何操作動輒幾萬、幾十萬,甚至幾百萬的頂點數據集
  • Pandas:這個是當下非常流行的數據分析工具包,相信很多人都是從Pandas開始接觸數據處理的,而Pandas整個就是基于NumPy之上的擴展
  • Matplotlib:作為NumPy生態圈的重要成員,二者關系自然是密不可分的
  • scikit-learn:機器學習領域應用最廣泛的工具包,則是建立在NumPy/SciPy/Matplotlib之上的,同樣深度依賴NumPy

3.NumPy 數組 VS Python 列表

學過 Python 的同學都知道,Python 的列表操作非常靈活,而 NumPy 數組繼承了 Python 數組操作便捷、靈活的特點,又具有極高的、接近 C 語言的運行效率。可以說,NumPy 數組是專為處理科學數據而生的。

  • NumPy 數組中的元素必須具有相同的數據類型,Python 列表的元素類型則不受限制;

  • NumPy 數組一旦創建,其元素數量不可再改變,Python 列表的元素則可以動態增減;

  • NumPy 數組和 Python 同樣操作簡單、靈活,但前者內置方法更多、運行速度更快。

4.NumPy 數組的數據類型

NumPy支持的數據類型主要有整型(integrate)、浮點型(float)、布爾型(bool)和復數型(complex),每一種數據類型根據占用內存的字節數又分為多個不同的子類型。當然,NumPy 也支持自定義類型,我們在后面講解數組排序的時候,再討論自定義類型。

咱們來演示一下如何查看、指定數據類型。

>>> a = np.array([0,1,2,3])>>> a.dtypedtype('int32')>>> a = np.array([0,1,2,3.0])>>> a.dtypedtype('float64')>>> a = np.array([0,1,2,3+0j])>>> a.dtypedtype('complex128')>>> a = np.array([0,1,2,3], dtype=np.int16)>>> a.dtypedtype('int16')>>> a = np.array([0,1,2,3], dtype=np.uint8)>>> a.dtypedtype('uint8')

dtype 是數組的屬性之一,可以很方便地查看數組的數據類型。創建數組時,如果不指定數據類型,NumPy 會根據輸入數據選擇合適的數據類型。指定數據類型的時候,通??梢允÷灶愋秃竺娴臄底帧H绻÷詳底值脑?#xff0c;整形和無符號整形默認是32位的,浮點型默認是64位的,復數型默認是128位。

5.NumPy 數組的屬性

剛才我們用 dtype 可以查看數組的數據類型,dtype 是數組對象的屬性之一,除了 dtype,NumPy 數組還有其他一些屬性,比如,shape,數組結構,或者叫形狀;sizes,數組元素個數;itemsize,數組元素字節數;flags,數組的內存信息;real,數組實部;imag,數據虛部;data,存儲區域內存地址,相當于指針。除此之外,還有一個屬性,ndim,數組的維度數,也叫秩,下一節會專門講它。屬性看起來有點多,但我們只需要記住 dtype shape 兩個屬性就足夠了。這兩個屬性非常重要,重要到你可以忽略其他的屬性。

屬性說明
ndarray.dtype元素類型
ndarray.shape數組結構
ndarray.size元素個數
ndarray.itemsize每個元素的大小,以字節為單位
ndarray.ndim數組的維度數,也叫秩
ndarray.flags數組的內存信息
ndarray.real元素的實部
ndarray.imag元素的虛部
ndarray.data元素數組的實際存儲區

下面是這些屬性的演示操作:

>>> a = np.arange(24, dtype=np.complex64).reshape((2,3,4))>>> a.dtype # 復數類型dtype('complex64')>>> a.shape # 2層3行4列(2, 3, 4)>>> a.size # 總共24個元素24>>> a.itemsize # 每個元素占用8個字節8>>> a.flags # 存儲信息 C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : False WRITEABLE : True ALIGNED : True WRITEBACKIFCOPY : False UPDATEIFCOPY : False>>> a.real # 實部array([[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]], [[12., 13., 14., 15.], [16., 17., 18., 19.], [20., 21., 22., 23.]]], dtype=float32)>>> a.imag # 虛部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.]]], dtype=float32)>>> a.data # 內存區域地址0x00000157D820BC78>>>> a.ndim # 維度數(秩)3

6.維、秩、軸

維,就是維度。我們說數組是幾維的,就是指維度,3維的數組,其維度數,自然就是3。維度數,有一個專用名字,叫做秩,也就是上一節提到的數組屬性 ndim。秩,這個名字感覺有些多余,不如維度數更容易理解。但是,軸的概念,大家一定要建立起來,并且要理解,因為軸的概念很重要。簡單來說,我們可以把數組的軸,和笛卡爾坐標系的軸對應一下。

一維數組,類比于一維空間,只有一個軸,那就是0軸。

二維數組,類比于二維平面,有兩個軸,我們習慣表示成行、列,那么行的方向就是0軸,列的方向就是1軸。

三維數組,類比于三維空間,有三個軸,我們習慣表示成層、行、列,那么層的方向就是0軸,行的方向就是1軸,列的方向就是2軸。

我們用一個求和的例子來演示一下軸概念的重要性。先來看看用 Python 的求和。

>>> a = [2,5,4,7,9,3] # python的求和函數sum(),只能對一維列表求和>>> sum(a)30>>> a = [[3,5,1],[2,6,9]] # 如果是多維列表,那就會報錯了>>> sum(a)Traceback (most recent call last): File "", line 1, in <module> sum(a)TypeError: unsupported operand type(s) for +: 'int' and 'list'```但有時候,我們的需求會比較復雜,比如,分層求和,逐行求和,逐列求和等。這時候,Numpy 的軸概念就可以大顯身手了。>>> a = np.arange(18).reshape((3,2,3)) # 3層2行3列的結構>>> aarray([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]], [[12, 13, 14], [15, 16, 17]]])>>> np.sum(a)153 >>> np.sum(a, axis=0) # 層合并求和array([[18, 21, 24], [27, 30, 33]])>>> np.sum(a, axis=1) # 行合并求和array([[ 3, 5, 7], [15, 17, 19], [27, 29, 31]])>>> np.sum(a, axis=2) # 列合并求和array([[ 3, 12], [21, 30], [39, 48]])>>> np.sum(np.sum(a, axis=1), axis=1) # 分層求和方法1array([15, 51, 87])>>> np.sum(np.sum(a, axis=1), axis=0) # 分層求和方法2array([15, 51, 87])

同樣是求和,顯然,NumPy數組要比Python列表更強大、更靈活。

7.廣播和矢量化

在講兩個概念之前,我們先思考兩個問題:

  • 整型數組各元素加1;
  • 求兩個等長整型數組對應元素之和組成的新數組。
  • 我們先用python數組實現:

    >>> x = list(range(5))>>> for i in range(len(x)): # 遍歷數組為每個元素加1 x[i] += 1>>> y = list(range(5,10))>>> z = list()>>> for i, j in zip(x, y): # 遍歷兩個數組,逐個元素求和 z.append(i+j)

    我們再用NumPy數組實現:

    >>> a = np.arange(5)>>> a += 1>>> b = np.arange(5,10)>>> c = a + b

    顯然,用NumPy數組實現起來,要比python數組更簡潔、更清晰。這得益于NumPy的兩大特性:廣播(broadcast)和矢量化(vectorization)。

    廣播和矢量化,是 NumPy 最精髓的特性,是 NumPy 的靈魂。所謂廣播,就是將對數組的操作映射到每個數組元素上;矢量化可以理解為代碼中沒有顯式的循環、索引等。NumPy數組最重要的特性是廣播和矢量化,體現在性能上,就是接近C語言的運行效率,體現在代碼上,則有這樣的特點:

  • 矢量化代碼更簡潔,更易于閱讀;
  • 代碼行越少意味著出錯的幾率越小;
  • 代碼更接近于標準的數學符號;
  • 矢量化代碼更pythonic
  • 總結

    以上是生活随笔為你收集整理的numpy二维数组改变某些数_【每天15分钟,5天学会NumPy】第1天:基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

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