array1[:n-1]
は、データバッファをオリジナルのarray1
と共有する新しい配列です。 array1
を再割り当てしても、そのデータバッファのサイズは変更されません。
array1.resize(n-1)
- ドキュメントは、このバッファが他のものと共有されていないことが明らかであれば、データバッファがサイズ変更/再割り当てされたことを示します。
In [1105]: arr=np.arange(1000)
In [1106]: arr.nbytes
Out[1106]: 4000
In [1107]: sys.getsizeof(arr) # those bytes plus overhead
Out[1107]: 4048
In [1108]: arr = arr[:500] # your slice
In [1109]: arr.nbytes # fewer bytes
Out[1109]: 2000
In [1110]: sys.getsizeof(arr) # just the overhead
Out[1110]: 48
sys.getsizeof
は、ビューのサイズを取得しますが、それは本来のarr
でバッファを共有するので、我々は唯一の「オーバーヘッド」を参照してください。元のarr
はまだ存在しますが、名前でアクセスすることはできません。データバッファはそれの半分を解放し、サイズが変更されたことが表示されますresize
方法で
In [1111]: arr=np.arange(1000)
In [1112]: arr.resize(500)
In [1113]: arr.nbytes
Out[1113]: 2000
In [1114]: sys.getsizeof(arr)
Out[1114]: 2048
。しかし、私はそれをテストする良い方法があるとは思っていません。少なくとも、このような小さな配列の場合はそうではありません。
潜在的に私たちは、numpy、pythonインタープリタ、およびシステムを管理する3つのシステムを持っています。 resize
の後にメモリが何らかの種類のnumpy
キャッシュに追加されているのか、Pythonのガベージコレクタによって収集されたのか、システムに返されたのかどうかを調べるために、コード(おそらくC-api) 。 NP `のためのドキュメントで
In [1120]: arr = np.arange(100).reshape(10,10).copy()
In [1121]: arr.resize(50)
In [1122]: sys.getsizeof(arr)
Out[1122]: 248
In [1123]: arr = np.arange(100).reshape(10,10).copy()
In [1124]: sys.getsizeof(arr)
Out[1124]: 456
In [1125]: arr.resize(50)
In [1126]: sys.getsizeof(arr)
Out[1126]: 248
In [1127]: arr.shape
Out[1127]: (50,)
In [1128]: arr.shape=(5,10) # inplace reshape
In [1129]: arr
Out[1129]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])
ルック:新しい
shape
続い============
resize
は、第1の軸に沿ってサイズを小さくしているようです。 resize' – hpaulj