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

簡介

創(chuàng)建數(shù)組有5種常規(guī)機制:

  1. 從其他Python結(jié)構(gòu)(例如,列表,元組)轉(zhuǎn)換
  2. numpy原生數(shù)組的創(chuàng)建(例如,arange、ones、zeros等)
  3. 從磁盤讀取數(shù)組,無論是標準格式還是自定義格式
  4. 通過使用字符串或緩沖區(qū)從原始字節(jié)創(chuàng)建數(shù)組
  5. 使用特殊庫函數(shù)(例如,random)

本節(jié)不包括復(fù)制,連接或以其他方式擴展或改變現(xiàn)有數(shù)組的方法。它也不會涵蓋創(chuàng)建對象數(shù)組或結(jié)構(gòu)化數(shù)組。這些都包含在他們自己的章節(jié)中。

將Python array_like對象轉(zhuǎn)換為Numpy數(shù)組

通常,在Python中排列成array-like結(jié)構(gòu)的數(shù)值數(shù)據(jù)可以通過使用array()函數(shù)轉(zhuǎn)換為數(shù)組。最明顯的例子是列表和元組。有關(guān)其使用的詳細信息,請參閱array()的文檔。一些對象可能支持數(shù)組協(xié)議并允許以這種方式轉(zhuǎn)換為數(shù)組。找出對象是否可以使用array()轉(zhuǎn)換為一個數(shù)組numpy 數(shù)組的簡單方法很簡單,只要交互式試一下,看看它是否工作?。≒ython方式)。

例子:

>>> 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原生數(shù)組的創(chuàng)建

Numpy內(nèi)置了從頭開始創(chuàng)建數(shù)組的函數(shù):

zeros(shape)將創(chuàng)建一個用指定形狀用0填充的數(shù)組。默認的dtype是float64。

>>> np.zeros((2, 3)) array([[ 0., 0., 0.], [ 0., 0., 0.]])

ones(shape)將創(chuàng)建一個用1個值填充的數(shù)組。它在所有其他方面與zeros相同。

arange()將創(chuàng)建具有有規(guī)律遞增值的數(shù)組。檢查文檔字符串以獲取有關(guān)可以使用的各種方式的完整信息。這里給出幾個例子:

>>> 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])

請注意,關(guān)于用戶應(yīng)該注意的最后用法在arange文檔字符串中有一些細微的描述。

linspace() 將創(chuàng)建具有指定數(shù)量元素的數(shù)組,并在指定的開始值和結(jié)束值之間平均間隔。例如:

>>> np.linspace(1., 4., 6)
array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])

這個創(chuàng)建函數(shù)的優(yōu)點是可以保證元素的數(shù)量以及開始和結(jié)束點,對于任意的開始,停止和步驟值,arange()通常不會這樣做。

indices() 將創(chuàng)建一組數(shù)組(堆積為一個更高維的數(shù)組),每個維度一個,每個維度表示該維度中的變化。一個例子說明比口頭描述要好得多:

>>> np.indices((3,3))
array([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[0, 1, 2], [0, 1, 2], [0, 1, 2]]])

這對于評估常規(guī)網(wǎng)格上多個維度的功能特別有用。

從磁盤讀取數(shù)組

這大概是大數(shù)組創(chuàng)建的最常見情況。當然,細節(jié)很大程度上取決于磁盤上的數(shù)據(jù)格式,所以本節(jié)只能給出如何處理各種格式的一般指示。

標準二進制格式

各種字段都有數(shù)組數(shù)據(jù)的標準格式。下面列出了那些已知的Python庫來讀取它們并返回numpy數(shù)組(可能有其他可能讀取并轉(zhuǎn)換為numpy數(shù)組的其他數(shù)據(jù),因此請檢查最后一節(jié))

HDF5: h5py
FITS: Astropy

無法直接讀取但不易轉(zhuǎn)換的格式示例是像PIL這樣的庫支持的格式(能夠讀取和寫入許多圖像格式,如jpg,png等)。

常見ASCII格式

逗號分隔值文件(CSV)被廣泛使用(以及Excel等程序的導(dǎo)出和導(dǎo)入選項)。有很多方法可以在Python中閱讀這些文件。python中有CSV函數(shù)和pylab函數(shù)(matplotlib的一部分)。

更多通用的ascii文件可以在scipy中使用io軟件包讀取。

自定義二進制格式

有各種各樣的方法可以使用。如果文件具有相對簡單的格式,那么可以編寫一個簡單的 I/O 庫,并使用 numpy fromfile() 函數(shù)和 .tofile() 方法直接讀取和寫入numpy數(shù)組(盡管介意你的字節(jié)序)!如果存在一個讀取數(shù)據(jù)的良好 C 或 C++ 庫,可以使用各種技術(shù)來封裝該庫,但這肯定要做得更多,并且需要更多的高級知識才能與C或C++ 接口。

使用特殊庫

有些庫可用于生成特殊用途的數(shù)組,且無法列出所有的這些庫。最常見的用途是隨機使用許多數(shù)組生成函數(shù),這些函數(shù)可以生成隨機值數(shù)組,以及一些實用函數(shù)來生成特殊矩陣(例如對角線)。

作者:柯廣的網(wǎng)絡(luò)日志 ? 創(chuàng)建數(shù)組


微信公眾號:Java大數(shù)據(jù)與數(shù)據(jù)倉庫