簡介
一般有5個機制創建數組:
1. 從其他Python結構(例如,列表,元組)轉換
2. numpy原生數組的創建(例如,arange、ones、zeros等)
3. 從磁盤讀取數組,無論是標準格式還是自定義格式
4. 通過使用字符串或緩沖區從原始字節創建數組
5. 使用特殊庫函數(例如,random)
本節不包括復制、join或以其他方式擴展或改變現有數組的方法。也不會涵蓋創建對象數組或結構化數組。這兩個都在它們自己的部分講述。
將Python array_like對象轉換為Numpy數組
通常,在Python中排列成array-like結構的數值數據可以通過使用array()函數轉換為數組。最明顯的例子是列表和元組。有關其使用的詳細信息,請參閱array()的文檔。一些對象可能支持數組協議,并允許以這種方式轉換到數組。找出對象是否可以使用array()轉換為一個數組numpy 數組的簡單方法很簡單,只要交互式試一下,看看它是否工作!(Python方式)。
注意每個元素的長度
>>> x = np.array([2,3,1,0])
>>> x = np.array([2, 3, 1, 0])
>>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,and types
>>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])
Numpy原生數組的創建
Numpy具有從頭開始創建數組的內置函數:
zeros(shape)
將創建一個用指定形狀用0
填充的數組。默認dtype
為float64
。
>>> np.zeros((2, 3)) array([[ 0., 0., 0.], [ 0., 0., 0.]])
ones(shape)
將創建一個用1
個值填充的數組。它在所有其他方面與zeros相同。
arange()
將創建具有定期遞增值
的數組。檢查docstring有關可以使用的各種方法的完整信息。這里將給出幾個例子:
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=np.float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
注意,關于用戶應該知道的最后使用的一些細微之處,在arange docstring中描述。
linspace()
將創建具有指定數量的元素的數組
,并在指定的開始值和結束值之間等間隔。例如:
>>> np.linspace(1., 4., 6)
array([ 1. , 1.6, 2.2, 2.8, 3.4, 4. ])
這個創建函數的優點是,可以保證元素的數量和起始點和結束點,arange()通常不會對任意的開始,停止和步長值做任何操作。
indices()
將創建一組數組(堆疊為一個更高維度的數組),每個維度一個,每個維表示該維度的變化。一個例子說明比口頭描述好得多:
>>> np.indices((3,3))
array([[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]])
>>>np.indices((3,3)).shape
(2, 3, 3)
這對于在規則網格上評估多個維度的函數特別有用。
從磁盤讀取數組
這可能是大數字組創建的最常見的情況。細節,當然,很大程度上取決于磁盤上的數據格式,因此本節只能給出如何處理各種格式的一般指針。
標準二進制格式
各種字段具有用于數組數據的標準格式。下面列出了已知的python庫讀取它們和返回numpy數組(可能有其他可以讀取和轉換為numpy數組,所以檢查最后一節)
HDF5: PyTables
FITS: PyFITS
不能直接讀取但不難轉換的格式的示例是像PIL
(能夠讀取和寫入許多圖像格式,例如jpg,png等)的庫支持的那些格式。
常見ASCII格式
逗號分隔值文件(CSV)被廣泛使用(以及Excel等程序的導出和導入選項)。在Python中有許多方法可以讀取這些文件。Python中有CSV函數,pylab中有函數(matplotlib的一部分)。
更多的通用ascii文件可以使用io包在scipy中讀取。
自定義二進制格式
有多種方法可以使用。如果文件具有相對簡單的格式,那么可以編寫一個簡單的I / O庫,并使用numpy fromfile()函數和.tofile()方法直接讀取和寫入numpy數組(注意你的字節序!如果存在讀取數據的良好C或C ++庫,那么可以使用各種技術打包該庫,盡管這當然是更多的工作,需要顯著更高級的知識來與C或C ++交互。
使用特殊庫
有一些庫可以用于為特殊目的生成數組,并且不可能枚舉它們。最常見的用途是隨機使用許多數組生成函數,其可以生成隨機值的陣列,以及一些用于生成特殊矩陣(例如對角線)的效用函數。
不能直接讀取但不難轉換的格式的示例是像PIL(能夠讀取和寫入許多圖像格式,例如jpg,png等)的庫支持的那些格式。
Ones and zeros
函數 | 描述 |
---|---|
empty (shape [,dtype,order])
|
返回給定形狀和類型的新數組,而不初始化條目。 |
empty_like (a [,dtype,order,subok])
|
返回具有與給定數組相同的形狀和類型的新數組。 |
eye (N [,M,k,dtype])
|
返回一個2-D數組,其中一個在對角線上,零在其他地方。 |
identity (n [,dtype])
|
返回身份數組。 |
ones (shape [,dtype,order])
|
返回給定形狀和類型的新數組,用數字填充。 |
ones_like (a [,dtype,order,subok])
|
返回與給定數組具有相同形狀和類型的數組。 |
zeros (shape [,dtype,order])
|
返回給定形狀和類型的新數組,用零填充。 |
zeros_like (a [,dtype,order,subok])
|
返回具有與給定數組相同的形狀和類型的零數組。 |
full (shape,fill_value [,dtype,order])
|
返回給定形狀和類型的新數組,用fill_value填充。 |
full_like (a,fill_value [,dtype,order,subok])
|
返回與給定數組相同形狀和類型的完整數組。 |
From existing data 從現有數據
函數 | 描述 |
---|---|
array (object[, dtype, copy, order, subok, ndmin])
|
創建數組。 |
asarray (a[, dtype, order])
|
將輸入轉換為數組。 |
asanyarray (a[, dtype, order])
|
將輸入轉換為ndarray,但傳遞ndarray子類。 |
ascontiguousarray (a [,dtype])
|
返回內存中的連續數組(C order)。 |
asmatrix (data [,dtype])
|
將輸入解釋為矩陣。 |
copy (a [,order])
|
返回給定對象的數組副本。 |
frombuffer (buffer [,dtype,count,offset])
|
將緩沖區解釋為1維數組。 |
fromfile (file [,dtype,count,sep])
|
從文本或二進制文件中的數據構造數組。 |
fromfunction (function,shape,\ * \ * kwargs)
|
通過在每個坐標上執行函數來構造數組。 |
fromiter (iterable,dtype [,count])
|
從可迭代對象創建新的1維數組。 |
fromstring (string [,dtype,count,sep])
|
根據字符串中的原始二進制或文本數據初始化的新1-D數組。 |
loadtxt (fname [,dtype,comments,delimiter,...])
|
從文本文件加載數據。 |
Creating record arrays (numpy.rec
) 創建記錄數組
注意
numpy.rec
是numpy.core.records
的首選別名。
函數 | 描述 |
---|---|
core.records.array (obj [,dtype,shape,...]) |
從各種各樣的對象構造一個記錄數組。 |
core.records.fromarrays (arrayList [,dtype,...]) |
從數組的(平面)列表創建一個記錄數組 |
core.records.fromrecords (recList [,dtype,...]) |
從文本形式的記錄列表創建一個recarray |
core.records.fromstring (datastring [,dtype,...]) |
從包含在中的二進制數據創建(只讀)記錄數組 |
core.records.fromfile (fd [,dtype,shape,...]) |
從二進制文件數據創建數組 |
Creating character arrays (numpy.char
) 創建字符數組
注意
numpy.char
是numpy.core.defchararray
的首選別名。
函數 | 描述 |
---|---|
core.defchararray.array (obj [,itemsize,...]) |
創建chararray 。 |
core.defchararray.asarray (obj [,itemsize,...]) |
將輸入轉換為chararray ,只有在必要時才復制數據。 |
Numerical ranges 數值范圍
函數 | 描述 |
---|---|
arange ([start,] stop [,step,] [,dtype]) |
在給定間隔內返回均勻間隔的值。 |
linspace (start,stop [,num,endpoint,...]) |
在指定的間隔內返回均勻間隔的數字。 |
logspace (start,stop [,num,endpoint,base,...]) |
返回以對數刻度均勻分布的數字。 |
geomspace |
|
meshgrid (\ * xi,\ * \ * kwargs) |
從坐標向量返回坐標矩陣。 |
mgrid |
nd_grid實例,返回密集的多維“網格網格”。 |
ogrid |
nd_grid實例,返回一個打開的多維“meshgrid”。 |
Building matrices 建立矩陣
函數 | 描述 |
---|---|
diag (v [,k]) |
提取對角線或構造對角數組。 |
diagflat (v [,k]) |
創建一個二維數組,將扁平輸入作為對角線。 |
tri (N [,M,k,dtype]) |
數組,其中一個在給定的對角線和在其他地方零。 |
tril (m [,k]) |
數組的下三角形。 |
triu (m [,k]) |
數組的上三角形。 |
vander (x [,N,increasing]) |
生成Vandermonde矩陣。 |
The Matrix class
函數 | 描述 |
---|---|
mat (data [,dtype]) |
將輸入解釋為矩陣。 |
bmat (obj [,ldict,gdict]) |
從字符串,嵌套序列或數組構建一個矩陣對象。 |