亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入解析NumPy的核心函數(shù)np.array()

 更新時(shí)間:2025年07月02日 14:46:26   作者:GG不是gg  
NumPy為Python提供了高效的多維數(shù)組對(duì)象以及一系列用于處理這些數(shù)組的工具,極大地簡(jiǎn)化了數(shù)值計(jì)算的過(guò)程,而np.array()作為NumPy庫(kù)的核心函數(shù)之一,是創(chuàng)建和操作數(shù)組的基礎(chǔ),感興趣的可以了解一下

NumPy為Python提供了高效的多維數(shù)組對(duì)象以及一系列用于處理這些數(shù)組的工具,極大地簡(jiǎn)化了數(shù)值計(jì)算的過(guò)程。而np.array()作為NumPy庫(kù)的核心函數(shù)之一,是創(chuàng)建和操作數(shù)組的基礎(chǔ)。

NumPy與np.array()簡(jiǎn)介

NumPy(Numerical Python的簡(jiǎn)稱(chēng))是Python中用于處理數(shù)組運(yùn)算的擴(kuò)展庫(kù),它提供了大量的數(shù)學(xué)函數(shù)來(lái)操作數(shù)組,使得數(shù)組的處理變得高效且簡(jiǎn)潔。np.array()則是NumPy庫(kù)中的一個(gè)基礎(chǔ)函數(shù),用于創(chuàng)建數(shù)組。

NumPy的重要性

NumPy在科學(xué)計(jì)算、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等眾多領(lǐng)域都有著廣泛的應(yīng)用。它的高效性源于其底層使用C語(yǔ)言實(shí)現(xiàn),能夠充分利用計(jì)算機(jī)的硬件資源,對(duì)數(shù)組進(jìn)行快速的運(yùn)算。與Python原生的列表相比,NumPy數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,這使得數(shù)組元素之間的訪問(wèn)和計(jì)算更為高效。例如,在進(jìn)行大規(guī)模的數(shù)據(jù)處理時(shí),使用NumPy數(shù)組可以顯著提高程序的運(yùn)行速度。

np.array()的作用

np.array()函數(shù)的主要作用是將Python中的各種數(shù)據(jù)結(jié)構(gòu)(如列表、元組等)轉(zhuǎn)換為NumPy數(shù)組,或者根據(jù)指定的參數(shù)創(chuàng)建一個(gè)新的數(shù)組。通過(guò)np.array()創(chuàng)建的數(shù)組可以方便地進(jìn)行各種數(shù)學(xué)運(yùn)算、索引和切片操作,為后續(xù)的數(shù)據(jù)處理和分析提供了基礎(chǔ)。

np.array()函數(shù)的詳細(xì)參數(shù)

np.array()函數(shù)的完整語(yǔ)法為:numpy.array(object, dtype = None, *, copy = True, order = 'K', subok = False, ndmin = 0, like = None)。下面我們來(lái)詳細(xì)介紹每個(gè)參數(shù)的含義和用法。

object參數(shù)

object參數(shù)是必填項(xiàng),它表示要轉(zhuǎn)換為數(shù)組的對(duì)象,可以是一個(gè)數(shù)組、任何暴露數(shù)組接口的對(duì)象、其__array__方法返回?cái)?shù)組的對(duì)象,或者任何(嵌套的)序列。如果object是一個(gè)標(biāo)量,則返回一個(gè)包含該標(biāo)量的0維數(shù)組。

例如,我們可以使用列表來(lái)創(chuàng)建一個(gè)一維數(shù)組:

import numpy as np
arr_1d = np.array([1, 2, 3, 4, 5])
print(arr_1d)

輸出結(jié)果為:[1 2 3 4 5]

也可以使用嵌套列表來(lái)創(chuàng)建一個(gè)二維數(shù)組:

arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d)

輸出結(jié)果為:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

dtype參數(shù)

dtype參數(shù)用于指定數(shù)組的數(shù)據(jù)類(lèi)型,它是可選的。如果不指定dtype,NumPy會(huì)根據(jù)傳入的數(shù)據(jù)自動(dòng)推斷出合適的數(shù)據(jù)類(lèi)型。例如:

arr = np.array([1, 2, 3])
print(arr.dtype)

輸出結(jié)果為:int64

在這個(gè)例子中,由于傳入的數(shù)據(jù)都是整數(shù),NumPy自動(dòng)推斷出數(shù)組的數(shù)據(jù)類(lèi)型為int64

然而,在某些情況下,我們可能需要顯式地指定數(shù)據(jù)類(lèi)型,以滿足特定的需求。比如,當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)包含浮點(diǎn)數(shù)的數(shù)組時(shí),可以這樣做:

arr_float = np.array([1, 2, 3], dtype = np.float32)
print(arr_float.dtype)

輸出結(jié)果為:float32

通過(guò)指定dtype = np.float32,我們創(chuàng)建了一個(gè)數(shù)據(jù)類(lèi)型為32位浮點(diǎn)數(shù)的數(shù)組。

指定數(shù)據(jù)類(lèi)型的好處之一是可以優(yōu)化內(nèi)存使用。例如,如果我們知道數(shù)組中的數(shù)據(jù)范圍較小,并且不需要高精度的計(jì)算,可以使用較小的數(shù)據(jù)類(lèi)型,如int8float16,這樣可以減少內(nèi)存的占用。

copy參數(shù)

copy參數(shù)用于控制是否復(fù)制數(shù)據(jù),它是一個(gè)布爾值,默認(rèn)為True。當(dāng)copy = True時(shí),無(wú)論輸入數(shù)據(jù)的來(lái)源如何,都會(huì)創(chuàng)建一個(gè)數(shù)據(jù)的副本;當(dāng)copy = False時(shí),如果輸入數(shù)據(jù)本身就是一個(gè)NumPy數(shù)組,并且不需要進(jìn)行任何數(shù)據(jù)類(lèi)型轉(zhuǎn)換或其他修改,那么將不會(huì)復(fù)制數(shù)據(jù),而是直接使用原數(shù)組的引用。

需要注意的是,當(dāng)copy = None時(shí),只有在__array__返回副本、obj是嵌套序列或需要滿足其他要求(如dtype、order等)時(shí)才會(huì)進(jìn)行復(fù)制。

例如,下面的代碼中,由于輸入數(shù)據(jù)是一個(gè)列表,所以無(wú)論copy參數(shù)的值如何,都會(huì)創(chuàng)建一個(gè)新的數(shù)組副本:

list_data = [1, 2, 3]
arr1 = np.array(list_data, copy = True)
arr2 = np.array(list_data, copy = False)
arr3 = np.array(list_data, copy = None)
print(arr1 is arr2)  # False
print(arr1 is arr3)  # False

輸出結(jié)果均為False,說(shuō)明arr1、arr2arr3都是不同的數(shù)組對(duì)象。

而當(dāng)輸入數(shù)據(jù)是一個(gè)NumPy數(shù)組時(shí),如果copy = False且不需要進(jìn)行其他修改,那么將不會(huì)復(fù)制數(shù)據(jù):

arr4 = np.array([1, 2, 3])
arr5 = np.array(arr4, copy = False)
print(arr4 is arr5)  # True

輸出結(jié)果為True,說(shuō)明arr4arr5指向同一個(gè)數(shù)組對(duì)象。

order參數(shù)

order參數(shù)用于指定數(shù)組在內(nèi)存中的存儲(chǔ)順序,它有四個(gè)可選值:'K''A'、'C'、'F'。

  • 'C'表示按C語(yǔ)言的行優(yōu)先順序存儲(chǔ),即先存儲(chǔ)第一行,再存儲(chǔ)第二行,以此類(lèi)推。
  • 'F'表示按Fortran語(yǔ)言的列優(yōu)先順序存儲(chǔ),即先存儲(chǔ)第一列,再存儲(chǔ)第二列,以此類(lèi)推。
  • 'A'表示如果輸入數(shù)據(jù)是Fortran連續(xù)的,則按'F'順序存儲(chǔ),否則按'C'順序存儲(chǔ)。
  • 'K'表示盡可能保持輸入數(shù)據(jù)的原始順序。

默認(rèn)情況下,order = 'K'。

例如,我們可以通過(guò)order參數(shù)來(lái)控制二維數(shù)組的存儲(chǔ)順序:

arr_2d_c = np.array([[1, 2, 3], [4, 5, 6]], order = 'C')
arr_2d_f = np.array([[1, 2, 3], [4, 5, 6]], order = 'F')
print(arr_2d_c.flags)
print(arr_2d_f.flags)

輸出結(jié)果分別為:

C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False

從輸出結(jié)果可以看出,arr_2d_c是按行優(yōu)先順序存儲(chǔ)的(C_CONTIGUOUS : True),而arr_2d_f是按列優(yōu)先順序存儲(chǔ)的(F_CONTIGUOUS : True)。

subok參數(shù)

subok參數(shù)是一個(gè)布爾值,默認(rèn)為False。當(dāng)subok = True時(shí),返回的數(shù)組將保留輸入數(shù)據(jù)的子類(lèi)類(lèi)型;當(dāng)subok = False時(shí),無(wú)論輸入數(shù)據(jù)的類(lèi)型如何,返回的數(shù)組都將被強(qiáng)制轉(zhuǎn)換為基類(lèi)ndarray類(lèi)型。

例如,假設(shè)我們有一個(gè)自定義的數(shù)組子類(lèi)MyArray,它繼承自np.ndarray

class MyArray(np.ndarray):
    pass
data = MyArray([1, 2, 3])
arr1 = np.array(data, subok = True)
arr2 = np.array(data, subok = False)
print(type(arr1))  # <class '__main__.MyArray'>
print(type(arr2))  # <class 'numpy.ndarray'>

輸出結(jié)果表明,當(dāng)subok = True時(shí),arr1仍然是MyArray類(lèi)型;而當(dāng)subok = False時(shí),arr2被轉(zhuǎn)換為了np.ndarray類(lèi)型。

ndmin參數(shù)

ndmin參數(shù)用于指定返回?cái)?shù)組的最小維度,它是一個(gè)整數(shù),默認(rèn)為0。如果輸入數(shù)據(jù)的維度小于ndmin,則會(huì)在數(shù)組的形狀前面添加一維,直到滿足最小維度的要求。

例如:

arr1 = np.array([1, 2, 3], ndmin = 1)
arr2 = np.array([1, 2, 3], ndmin = 2)
arr3 = np.array([1, 2, 3], ndmin = 3)
print(arr1.shape)  # (3,)
print(arr2.shape)  # (1, 3)
print(arr3.shape)  # (1, 1, 3)

在這個(gè)例子中,輸入數(shù)據(jù)[1, 2, 3]是一個(gè)一維數(shù)組。當(dāng)ndmin = 1時(shí),數(shù)組形狀不變;當(dāng)ndmin = 2時(shí),在前面添加了一維,變成了二維數(shù)組(1, 3);當(dāng)ndmin = 3時(shí),在前面添加了兩維,變成了三維數(shù)組(1, 1, 3)。

like參數(shù)

like參數(shù)是在NumPy 1.20.0版本中新增的,它用于指定一個(gè)參考對(duì)象,以便創(chuàng)建與該對(duì)象兼容的數(shù)組。如果傳入的like參數(shù)支持__array_function__協(xié)議,那么結(jié)果將由該協(xié)議定義。

例如:

arr = np.array([1, 2, 3])
new_arr = np.array([4, 5, 6], like = arr)
print(type(new_arr))  # <class 'numpy.ndarray'>

在這個(gè)例子中,我們以arr為參考對(duì)象,創(chuàng)建了一個(gè)新的數(shù)組new_arr,new_arr的類(lèi)型與arr相同,都是np.ndarray。

np.array()函數(shù)的使用示例

創(chuàng)建基本的一維和二維數(shù)組

如前文所述,使用np.array()函數(shù)可以很方便地創(chuàng)建一維和二維數(shù)組。
創(chuàng)建一維數(shù)組:

arr_1d = np.array([1, 2, 3, 4, 5])
print(arr_1d)

創(chuàng)建二維數(shù)組:

arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d)

創(chuàng)建具有特定數(shù)據(jù)類(lèi)型的數(shù)組

通過(guò)dtype參數(shù),我們可以創(chuàng)建具有特定數(shù)據(jù)類(lèi)型的數(shù)組。
創(chuàng)建整數(shù)類(lèi)型的數(shù)組:

arr_int = np.array([1, 2, 3], dtype = np.int16)
print(arr_int.dtype)

創(chuàng)建浮點(diǎn)數(shù)類(lèi)型的數(shù)組:

arr_float = np.array([1.0, 2.0, 3.0], dtype = np.float64)
print(arr_float.dtype)

創(chuàng)建復(fù)數(shù)類(lèi)型的數(shù)組:

arr_complex = np.array([1 + 1j, 2 + 2j, 3 + 3j], dtype = np.complex128)
print(arr_complex.dtype)

創(chuàng)建多維數(shù)組

np.array()函數(shù)不僅可以創(chuàng)建一維和二維數(shù)組,還可以創(chuàng)建更高維度的數(shù)組。只需在傳入的序列中嵌套更多的層級(jí)即可。
創(chuàng)建三維數(shù)組:

arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr_3d)

輸出結(jié)果為:

[[[1 2]
  [3 4]]
 [[5 6]
  [7 8]]]

從其他數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為數(shù)組

除了使用列表和元組來(lái)創(chuàng)建數(shù)組外,np.array()函數(shù)還可以將其他數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為數(shù)組。
將集合轉(zhuǎn)換為數(shù)組:

set_data = {1, 2, 3, 3}  # 集合會(huì)自動(dòng)去重
arr_set = np.array(set_data)
print(arr_set)

輸出結(jié)果為:[1 2 3]

將字符串轉(zhuǎn)換為數(shù)組:

str_data = "hello"
arr_str = np.array(list(str_data))
print(arr_str)

輸出結(jié)果為:['h' 'e' 'l' 'l' 'o']

使用ndmin參數(shù)創(chuàng)建具有最小維度的數(shù)組

通過(guò)ndmin參數(shù),我們可以確保創(chuàng)建的數(shù)組具有指定的最小維度。

arr1 = np.array([1, 2, 3], ndmin = 2)
print(arr1.shape)  # (1, 3)
arr2 = np.array([1, 2, 3], ndmin = 3)
print(arr2.shape)  # (1, 1, 3)

np.array()函數(shù)與與Python原生列表的比較

雖然Python原生列表也可以存儲(chǔ)多個(gè)元素,但與NumPy數(shù)組相比,它們有很多不同之處。

  1. 內(nèi)存存儲(chǔ):NumPy數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,而Python列表是離散存儲(chǔ)的。這使得NumPy數(shù)組在進(jìn)行數(shù)值計(jì)算時(shí)能夠更高效地利用內(nèi)存,提高計(jì)算速度。
  2. 數(shù)據(jù)類(lèi)型:NumPy數(shù)組中的所有元素必須是同一數(shù)據(jù)類(lèi)型,而Python列表可以包含不同數(shù)據(jù)類(lèi)型的元素。這使得NumPy數(shù)組在進(jìn)行數(shù)學(xué)運(yùn)算時(shí)更加高效,因?yàn)椴恍枰M(jìn)行類(lèi)型檢查和轉(zhuǎn)換。
  3. 運(yùn)算效率:由于NumPy數(shù)組的內(nèi)存存儲(chǔ)方式和數(shù)據(jù)類(lèi)型的一致性,NumPy提供了大量的優(yōu)化函數(shù),能夠?qū)?shù)組進(jìn)行快速的數(shù)學(xué)運(yùn)算。相比之下,使用Python原生列表進(jìn)行相同的運(yùn)算需要編寫(xiě)循環(huán),效率較低。

例如,計(jì)算兩個(gè)數(shù)組的元素之和:

import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result_np = arr1 + arr2
print(result_np)

輸出結(jié)果為:[5 7 9]

而使用Python原生列表實(shí)現(xiàn)相同的功能:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
result_list = []
for i in range(len(list1)):
    result_list.append(list1[i] + list2[i])
print(result_list)

輸出結(jié)果為:[5, 7, 9]

可以看到,使用NumPy數(shù)組的代碼更加簡(jiǎn)潔,且在處理大規(guī)模數(shù)據(jù)時(shí),運(yùn)算效率會(huì)更高。

到此這篇關(guān)于深入解析NumPy的核心函數(shù)np.array()的文章就介紹到這了,更多相關(guān)NumPy np.array()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python模塊對(duì)Redis數(shù)據(jù)庫(kù)的連接與使用講解

    Python模塊對(duì)Redis數(shù)據(jù)庫(kù)的連接與使用講解

    這篇文章主要介紹了Python模塊對(duì)Redis數(shù)據(jù)庫(kù)的連接與使用,通過(guò)實(shí)例代碼給大家介紹了Python連接Redis數(shù)據(jù)庫(kù)方法,Python使用連接池連接Redis數(shù)據(jù)庫(kù)方法,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • 使用wxPython和pandas模塊生成Excel文件的代碼實(shí)現(xiàn)

    使用wxPython和pandas模塊生成Excel文件的代碼實(shí)現(xiàn)

    在Python編程中,有時(shí)我們需要根據(jù)特定的數(shù)據(jù)生成Excel文件,本文將介紹如何使用wxPython和pandas模塊來(lái)實(shí)現(xiàn)這個(gè)目標(biāo),文中通過(guò)代碼示例給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-05-05
  • Python探索之SocketServer詳解

    Python探索之SocketServer詳解

    這篇文章主要介紹了Python探索之SocketServer詳解,小編覺(jué)得還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • python生成二維矩陣的兩種方法小結(jié)

    python生成二維矩陣的兩種方法小結(jié)

    本文主要介紹了python生成二維矩陣,包含列表生成m行n列的矩陣和numpy生成想要維度的矩陣的兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • python def 定義函數(shù),調(diào)用函數(shù)方式

    python def 定義函數(shù),調(diào)用函數(shù)方式

    這篇文章主要介紹了python def 定義函數(shù),調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè)

    使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè)

    這篇文章主要介紹了使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè),應(yīng)用機(jī)器學(xué)習(xí)的工具來(lái)預(yù)測(cè)哪些乘客在悲劇中幸存下來(lái)
    2023-03-03
  • python利用文件時(shí)間批量重命名照片和視頻

    python利用文件時(shí)間批量重命名照片和視頻

    這篇文章主要為大家詳細(xì)介紹了python利用文件時(shí)間批量重命名照片和視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • Python爬蟲(chóng)代理IP池實(shí)現(xiàn)方法

    Python爬蟲(chóng)代理IP池實(shí)現(xiàn)方法

    在公司做分布式深網(wǎng)爬蟲(chóng),搭建了一套穩(wěn)定的代理池服務(wù),為上千個(gè)爬蟲(chóng)提供有效的代理,保證各個(gè)爬蟲(chóng)拿到的都是對(duì)應(yīng)網(wǎng)站有效的代理IP,從而保證爬蟲(chóng)快速穩(wěn)定的運(yùn)行,所以就想利用一些免費(fèi)的資源搞一個(gè)簡(jiǎn)單的代理池服務(wù)。
    2017-01-01
  • python3實(shí)現(xiàn)Dijkstra算法最短路徑的實(shí)現(xiàn)

    python3實(shí)現(xiàn)Dijkstra算法最短路徑的實(shí)現(xiàn)

    這篇文章主要介紹了python3實(shí)現(xiàn)Dijkstra算法最短路徑的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python3 通過(guò) pybind11 使用Eigen加速代碼的步驟詳解

    python3 通過(guò) pybind11 使用Eigen加速代碼的步驟詳解

    這篇文章主要介紹了python3 通過(guò) pybind11 使用Eigen加速代碼的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論