numpy基礎:數組創建

參考
NumPy v1.11手冊
數組創建例程

簡介

一般有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填充的數組。默認dtypefloat64

>>> 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.recnumpy.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.charnumpy.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]) 從字符串,嵌套序列或數組構建一個矩陣對象。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容