NumPy數(shù)組是一個多維數(shù)組對象,稱為ndarray。其由兩部分組成:
·實(shí)際的數(shù)據(jù)
·描述這些數(shù)據(jù)的元數(shù)據(jù)
大部分操作僅針對于元數(shù)據(jù),而不改變底層實(shí)際的數(shù)據(jù)。
關(guān)于NumPy數(shù)組有幾點(diǎn)必需了解的:
·NumPy數(shù)組的下標(biāo)從0開始。
·同一個NumPy數(shù)組中所有元素的類型必須是相同的。
NumPy數(shù)組屬性
在詳細(xì)介紹NumPy數(shù)組之前。先詳細(xì)介紹下NumPy數(shù)組的基本屬性。NumPy數(shù)組的維數(shù)稱為秩(rank),一維數(shù)組的秩為1,二維數(shù)組的秩為2,以此類推。在NumPy中,每一個線性的數(shù)組稱為是一個軸(axes),秩其實(shí)是描述軸的數(shù)量。比如說,二維數(shù)組相當(dāng)于是兩個一維數(shù)組,其中第一個一維數(shù)組中每個元素又是一個一維數(shù)組。所以一維數(shù)組就是NumPy中的軸(axes),第一個軸相當(dāng)于是底層數(shù)組,第二個軸是底層數(shù)組里的數(shù)組。而軸的數(shù)量——秩,就是數(shù)組的維數(shù)。
NumPy的數(shù)組中比較重要ndarray對象屬性有:
1.ndarray.ndim:數(shù)組的維數(shù)(即數(shù)組軸的個數(shù)),等于秩。最常見的為二維數(shù)組(矩陣)。
2.ndarray.shape:數(shù)組的維度。為一個表示數(shù)組在每個維度上大小的整數(shù)元組。例如二維數(shù)組中,表示數(shù)組的“行數(shù)”和“列數(shù)”。ndarray.shape返回一個元組,這個元組的長度就是維度的數(shù)目,即ndim屬性。
3.ndarray.size:數(shù)組元素的總個數(shù),等于shape屬性中元組元素的乘積。
4.ndarray.dtype:表示數(shù)組中元素類型的對象,可使用標(biāo)準(zhǔn)的Python類型創(chuàng)建或指定dtype。另外也可使用前一篇文章中介紹的NumPy提供的數(shù)據(jù)類型。
5.ndarray.itemsize:數(shù)組中每個元素的字節(jié)大小。例如,一個元素類型為float64的數(shù)組itemsiz屬性值為8(float64占用64個bits,每個字節(jié)長度為8,所以64/8,占用8個字節(jié)),又如,一個元素類型為complex32的數(shù)組item屬性為4(32/8)。
6.ndarray.data:包含實(shí)際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個屬性。
數(shù)組拼接方法一
思路:首先將數(shù)組轉(zhuǎn)成列表,然后利用列表的拼接函數(shù)append()、extend()等進(jìn)行拼接處理,最后將列表轉(zhuǎn)成數(shù)組。
示例1:
1
2
3
4
5
6
7
8
9
10
11
|
>>> a = np.array([ 1 , 2 , 5 ]) >>> b = np.array([ 10 , 12 , 15 ]) >>> a_list = list (a) >>> b_list = list (b) >>> a_list.extend(b_list) >>> a_list [ 1 , 2 , 5 , 10 , 12 , 15 ] >>> a = np.array(a_list) >>> a array([ 1 , 2 , 5 , 10 , 12 , 15 ]) |
該方法只適用于簡單的一維數(shù)組拼接,由于轉(zhuǎn)換過程很耗時間,對于大量數(shù)據(jù)的拼接一般不建議使用。
數(shù)組拼接方法二
思路:numpy提供了numpy.append(arr,values,axis=None)函數(shù)。對于參數(shù)規(guī)定,要么一個數(shù)組和一個數(shù)值;要么兩個數(shù)組,不能三個及以上數(shù)組直接append拼接。append函數(shù)返回的始終是一個一維數(shù)組。
示例2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
>>> a = np.arange( 5 ) >>> a array([ 0 , 1 , 2 , 3 , 4 ]) >>> np.append(a, 10 ) array([ 0 , 1 , 2 , 3 , 4 , 10 ]) >>> a array([ 0 , 1 , 2 , 3 , 4 ]) >>> b = np.array([ 11 , 22 , 33 ]) >>> b array([ 11 , 22 , 33 ]) >>> np.append(a,b) array([ 0 , 1 , 2 , 3 , 4 , 11 , 22 , 33 ]) >>> a array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> b = np.array([[ 7 , 8 , 9 ],[ 10 , 11 , 12 ]]) >>> b array([[ 7 , 8 , 9 ], [ 10 , 11 , 12 ]]) >>> np.append(a,b) array([ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ]) |
numpy的數(shù)組沒有動態(tài)改變大小的功能,numpy.append()函數(shù)每次都會重新分配整個數(shù)組,并把原來的數(shù)組復(fù)制到新數(shù)組中。
數(shù)組拼接方法三
思路:numpy提供了numpy.concatenate((a1,a2,...),axis=0)函數(shù)。能夠一次完成多個數(shù)組的拼接。其中a1,a2,...是數(shù)組類型的參數(shù)
示例3:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> a = np.array([ 1 , 2 , 3 ]) >>> b = np.array([ 11 , 22 , 33 ]) >>> c = np.array([ 44 , 55 , 66 ]) >>> np.concatenate((a,b,c),axis = 0 ) # 默認(rèn)情況下,axis=0可以不寫 array([ 1 , 2 , 3 , 11 , 22 , 33 , 44 , 55 , 66 ]) #對于一維數(shù)組拼接,axis的值不影響最后的結(jié)果 >>> a = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]]) >>> b = np.array([[ 11 , 21 , 31 ],[ 7 , 8 , 9 ]]) >>> np.concatenate((a,b),axis = 0 ) array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 11 , 21 , 31 ], [ 7 , 8 , 9 ]]) >>> np.concatenate((a,b),axis = 1 ) #axis=1表示對應(yīng)行的數(shù)組進(jìn)行拼接 array([[ 1 , 2 , 3 , 11 , 21 , 31 ], [ 4 , 5 , 6 , 7 , 8 , 9 ]]) |
對numpy.append()和numpy.concatenate()兩個函數(shù)的運(yùn)行時間進(jìn)行比較
示例4:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> from time import clock as now >>> a = np.arange( 9999 ) >>> b = np.arange( 9999 ) >>> time1 = now() >>> c = np.append(a,b) >>> time2 = now() >>> print time2 - time1 28.2316728446 >>> a = np.arange( 9999 ) >>> b = np.arange( 9999 ) >>> time1 = now() >>> c = np.concatenate((a,b),axis = 0 ) >>> time2 = now() >>> print time2 - time1 20.3934997107 |
可知,concatenate()效率更高,適合大規(guī)模的數(shù)據(jù)拼接
總結(jié)
以上就是本文關(guān)于numpy數(shù)組拼接簡單示例的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/zyl1042635242/article/details/43162031