NumPy 数组对象
生活随笔
收集整理的這篇文章主要介紹了
NumPy 数组对象
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
NumPy 數(shù)組對象
# 來源:NumPy Essentials ch2數(shù)組索引和切片
# 創(chuàng)建 100x100 個 0~1 隨機數(shù) x = np.random.random((100, 100)) # 取第 42 行 87 列的元素(從零開始) y = x[42, 87]# 取第 k 行的所有元素 # 等價于 x[k] 和 x[k, ...] print(x[k, :]) a = np.array([[10 * y + x for x in range(6)] for y in range(6)]) ''' +--+--+--+--+--+--+ | 0| 1| 2| 3| 4| 5| +--+--+--+--+--+--+ |10|11|12|13|14|15| +--+--+--+--+--+--+ |20|21|22|23|24|25| +--+--+--+--+--+--+ |30|31|32|33|34|35| +--+--+--+--+--+--+ |40|41|42|43|44|45| +--+--+--+--+--+--+ |50|51|52|53|54|55| +--+--+--+--+--+--+ '''a[0, 3:5] ''' array([3, 4]) +--+--+--+--+--+--+ | | | | 3| 4| | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ '''a[4: ,4:] ''' array([[44, 45], [54, 55]]) +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | |44|45| +--+--+--+--+--+--+ | | | | |54|55| +--+--+--+--+--+--+ '''a[:, 2] ''' array([ 2, 12, 22, 32, 42, 52]) +--+--+--+--+--+--+ | | | 2| | | | +--+--+--+--+--+--+ | | |12| | | | +--+--+--+--+--+--+ | | |22| | | | +--+--+--+--+--+--+ | | |32| | | | +--+--+--+--+--+--+ | | |42| | | | +--+--+--+--+--+--+ | | |52| | | | +--+--+--+--+--+--+ '''a[2::2, ::2] ''' array([[20, 22, 24], [40, 42, 44]]) +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ |20| |22| | |24| +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ |40| |42| | |44| +--+--+--+--+--+--+ | | | | | | | +--+--+--+--+--+--+ '''內存布局
# flags 屬性保存了數(shù)組的內存布局信息 print x.flags '''C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False C_CONTIGUOUS:是否為 C 風格連續(xù),也就是行為主,最后一個維度是連續(xù)的 F_CONTIGUOUS:是否為 F 風格連續(xù),也就是列為主,第一個維度是連續(xù)的 OWNDATA:是否擁有數(shù)據(jù),視圖不擁有數(shù)據(jù) WRITEABLE:是否可寫 ALIGNED:是否對齊 UPDATEIFCOPY: '''# NumPy 默認是 C 風格連續(xù) c_array = np.random.rand(10000, 10000) # 可以手動轉換為 F 風格連續(xù) f_array = np.asfortranarray(c_array) def sum_row(x):'''計算第零行的和'''return np.sum(x[0, :]) def sum_col(x):'''計算第零列的和'''return np.sum(x[:, 0])''' 我們可以看到,C 風格數(shù)組按行訪問比較快 F 風格數(shù)組按列訪問比較快%timeit sum_row(c_array) 10000 loops, best of 3: 21.2 μs per loop %timeit sum_row(f_array) 10000 loops, best of 3: 157 μs per loop %timeit sum_col(c_array) 10000 loops, best of 3: 162 μs per loop %timeit sum_col(f_array) 10000 loops, best of 3: 21.4 μs per loop '''副本和視圖
# 視圖不共享 NumPy 對象,共享底層數(shù)據(jù) # 副本不共享 NumPy 對象,不共享底層數(shù)據(jù)x = np.random.rand(100,10)# 切片和索引都會產生視圖 # 而不是副本 y = x[:5, :] # 看看底層內存是否一致 np.may_share_memory(x, y) # True# 我們將 y 所有元素清零 y[:] = 0# 并打印 x 前 5 行 print(x[:5, :]) ''' [[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] '''# 但是這樣不會產生視圖 x = np.random.rand(100,10) y = np.empty([5, 10]) y[:] = x[:5, :] np.may_share_memory(x, y) # False y[:] = 0 print(x[:5, :])數(shù)組創(chuàng)建
# 最簡單的方式就是從 Python 列表創(chuàng)建 NumPy 數(shù)組 x = np.array([1, 2, 3]) y = np.array(['hello', 'world']) # 但有時我們想創(chuàng)建范圍內的數(shù)值數(shù)組 x = range(5) y = np.array(x) # NumPy 有個輔助函數(shù) # 等價于上面的操作 x = np.arange(5) # 多維數(shù)組也是一樣的 x = np.array([[1, 2, 3],[4, 5, 6]]) x.ndim # 2 x.shape # (2, 3)# rand 創(chuàng)建指定形狀的數(shù)組,元素為 0~1 的隨機數(shù) x = np.random.rand(2, 2, 2) print(x.shape) # (2, 2, 2)# random 和 rand 相似 # 只是接受元組形式的形狀 shape_tuple = (2, 3, 4) y = np.random.random(shape_tuple) print(y.shape) # (2, 3, 4) # randint(l, h, size=sz) 創(chuàng)建 l ~ h-1 的隨機整數(shù) # 默認是 10 個 LOW, HIGH = 1, 11 SIZE = 10 x = np.random.randint(LOW, HIGH, size=SIZE) print(x) [ 6 9 10 7 9 5 8 8 9 3] # 還有一些其它的創(chuàng)建函數(shù) # zeros(size) 和 ones(size) 創(chuàng)建指定形狀的全零或全一數(shù)組 # eye(n) 創(chuàng)建 n 維單位矩陣 # full(size, n) 創(chuàng)建指定形狀的純量數(shù)組,所有元素都為 n數(shù)據(jù)類型
x = np.random.random((10,10)) # dtype 屬性是數(shù)據(jù)類型 x.dtype # dtype('float64') x = np.array(range(10)) x.dtype # dtype('int32') x = np.array(['hello', 'world']) x.dtype # dtype('S5') # 創(chuàng)建數(shù)組時可以指定數(shù)據(jù)類型 # 我們可以傳入 NumPy 類型 x = np.ones((10, 10), dtype=np.int) x.dtype # dtype('int32') # 也可以傳入表示類型的字符串 x = np.zeros((10, 10), dtype='|S1') x.dtype # dtype('S1') # NumPy 會使用它們來構造 dtype # 完整列表請見 # http://docs.scipy.org/doc/numpy/user/basics.types.html總結
以上是生活随笔為你收集整理的NumPy 数组对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS6.5下安装Apache2.
- 下一篇: 第二次冲刺10