numpy數(shù)組拼接簡單示例
NumPy數(shù)組是一個多維數(shù)組對象,稱為ndarray。其由兩部分組成:
·實際的數(shù)據(jù)
·描述這些數(shù)據(jù)的元數(shù)據(jù)
大部分操作僅針對于元數(shù)據(jù),而不改變底層實際的數(shù)據(jù)。
關于NumPy數(shù)組有幾點必需了解的:
·NumPy數(shù)組的下標從0開始。
·同一個NumPy數(shù)組中所有元素的類型必須是相同的。
NumPy數(shù)組屬性
在詳細介紹NumPy數(shù)組之前。先詳細介紹下NumPy數(shù)組的基本屬性。NumPy數(shù)組的維數(shù)稱為秩(rank),一維數(shù)組的秩為1,二維數(shù)組的秩為2,以此類推。在NumPy中,每一個線性的數(shù)組稱為是一個軸(axes),秩其實是描述軸的數(shù)量。比如說,二維數(shù)組相當于是兩個一維數(shù)組,其中第一個一維數(shù)組中每個元素又是一個一維數(shù)組。所以一維數(shù)組就是NumPy中的軸(axes),第一個軸相當于是底層數(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ù)組中元素類型的對象,可使用標準的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ù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個屬性。
數(shù)組拼接方法一
思路:首先將數(shù)組轉成列表,然后利用列表的拼接函數(shù)append()、extend()等進行拼接處理,最后將列表轉成數(shù)組。
示例1:
>>> import numpy as np >>> 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ù)組拼接,由于轉換過程很耗時間,對于大量數(shù)據(jù)的拼接一般不建議使用。
數(shù)組拼接方法二
思路:numpy提供了numpy.append(arr,values,axis=None)函數(shù)。對于參數(shù)規(guī)定,要么一個數(shù)組和一個數(shù)值;要么兩個數(shù)組,不能三個及以上數(shù)組直接append拼接。append函數(shù)返回的始終是一個一維數(shù)組。
示例2:
>>> 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ù)組復制到新數(shù)組中。
數(shù)組拼接方法三
思路:numpy提供了numpy.concatenate((a1,a2,...),axis=0)函數(shù)。能夠一次完成多個數(shù)組的拼接。其中a1,a2,...是數(shù)組類型的參數(shù)
示例3:
>>> 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) # 默認情況下,axis=0可以不寫
array([ 1, 2, 3, 11, 22, 33, 44, 55, 66]) #對于一維數(shù)組拼接,axis的值不影響最后的結果
>>> 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表示對應行的數(shù)組進行拼接
array([[ 1, 2, 3, 11, 21, 31],
[ 4, 5, 6, 7, 8, 9]])
對numpy.append()和numpy.concatenate()兩個函數(shù)的運行時間進行比較
示例4:
>>> 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ù)拼接
總結
以上就是本文關于numpy數(shù)組拼接簡單示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Python numpy生成矩陣、串聯(lián)矩陣代碼分享
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- NumPy 數(shù)組拼接與分割的使用詳解
- numpy中數(shù)組拼接、數(shù)組合并方法總結(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)
- numpy concatenate數(shù)組拼接方法示例介紹
- 詳解Numpy中的數(shù)組拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
- Python numpy實現(xiàn)二維數(shù)組和一維數(shù)組拼接的方法
- numpy 進行數(shù)組拼接,分別在行和列上合并的實例
- NumPy中數(shù)組的拼接(Concatenation)的使用
相關文章
tensorflow 利用expand_dims和squeeze擴展和壓縮tensor維度方式
今天小編就為大家分享一篇tensorflow 利用expand_dims和squeeze擴展和壓縮tensor維度方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Django項目開發(fā)中cookies和session的常用操作分析
這篇文章主要介紹了Django項目開發(fā)中cookies和session的常用操作,結合實例形式分析了Django中cookie與session的檢查、設置、獲取等常用操作技巧,需要的朋友可以參考下2018-07-07
OpenCV+MediaPipe實現(xiàn)手部關鍵點識別
這篇文章主要介紹了如何通過OpenCV MediaPipe實現(xiàn)手部關鍵點識別,文中的示例代碼講解詳細,對我們學習或工作有一定的價值,需要的可以參考一下2022-01-01

