Python ndarray.strides用法
生活随笔
收集整理的這篇文章主要介紹了
Python ndarray.strides用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用法
ndarray.strides: 跨越數組各個維度所需要經過的字節數元組
a = np.array([[10,2,4],[3, 4,11]],dtype=np.int32) print(a.strides) #(12,4) 12表示在內存中a[n, 0]到a[n+1, 0]跨過多少byte; 4表示在內存中a[n, 0]到a[n, 1]跨過多少byte# 查看數組a所有元素占用內存大小,單位byte print(a.nbytes) # 24 # 查看數組a每個元素占用內存大小,單位byte print(a.itemsize) # 4print(a[:,1]) # [2 4] print(a[:,1].strides) # (12,) stride, = a[:,1].strides print(stride) # 12數組a以24(6個值*4=24)個字節的形式存儲在內存中,一個接一個(又稱為連續內存塊)。數組的步幅告訴我們要沿著某個軸移到下一個位置,我們必須在內存中跳過多少個字節。
解釋:
基礎:
- 1byte = 8bit
- 不同數據類型占據的內存大小不同,總的來說一個32位的類型需要4byte,64位的類型需要8byte,可參考下表
| 數值 \ 數值類型 (單位:Byte) | int32 | int64 | float32 | float64 |
|–|--|–|--|–|
| [] | 96 | 96 | 96 | 96 |
| 1 | 4 | 8 | 4 | 8 |
表格意思:一個空的數組[]就占用內存96byte,因為它存放了關于數組大小等信息。32位的數組一個元素占用4byte,64的數組,一個元素占用8byte
計算規則:
- 跨越第1維:從a[x,0]到a[x,1]經過4個字節(1個值)才能移至下一列
- 跨越第0維:從a[0,x]到a[1,x]的話,需要經過12(3個值x4)個字節才能移至下一行中的相同位置,因為a[0],也就是a的一行有3個數據,占據12個字節
- 因此數組a的步幅將為(12, 4)
示例
y = np.reshape(np.arange(2*3*4), (2,3,4)) print(y) print(y.strides) # (48, 16, 4)總結
以上是生活随笔為你收集整理的Python ndarray.strides用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解python中的round()函数
- 下一篇: numpy.lib.stride_tri