Все concatenate
(stack
- это просто еще один способ вызвать это) создать массив со своим собственным буфером данных. Это никогда не view
оригинала (ов).
Ваш rv0
- это массив (np.ndarray
), подобный recs
, со своей собственной формой, dtype и шагами. Он просто разделяет буфер данных с recs
. Его можно описать как «представление» recs
, но в остальном он используется как любой другой массив. Он не помечен как класс или объект view
.
In [409]: recs = np.arange(2*2).reshape(2,2)
...: recs2 = np.arange(4,2*2*2).reshape(2,2)
Поскольку recs
- это reshape
массива, созданного arange
, это тоже "представление". Это можно сделать более очевидным с помощью:
temp = np.arange(2*2)
recs = temp.reshape(2,2)
np.may_share_memory(temp, recs)
Мы можем сделать мгновенный снимок, так сказать, буфера данных с помощью ravel()
(который просто производит 1d просмотр):
In [411]: recs.ravel()
Out[411]: array([0, 1, 2, 3])
In [412]: recs2.ravel()
Out[412]: array([4, 5, 6, 7])
Теперь посмотрите на stack
:
In [414]: mview = np.stack([recs,recs2], axis=0)
In [415]: mview
Out[415]:
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
In [416]: mview.ravel()
Out[416]: array([0, 1, 2, 3, 4, 5, 6, 7])
ravel
из mview
не является подмножеством Out[411]
и Out[412]
. mview
должен иметь свой собственный непрерывный буфер данных. Нет механизма создания массива, который разделяет память с двумя или более другими массивами (если только они не разделяют память).
Даже stack
, созданный из кусочков одного и того же массива, имеет свой собственный буфер данных:
In [420]: x = np.stack((recs[0],recs[1]))
In [421]: x
Out[421]:
array([[0, 1],
[2, 3]])
In [422]: np.may_share_memory(recs, x)
Out[422]: False
Мне нравится использовать __array_interface__
для проверки местоположения буфера данных (другие определяющие атрибуты):
In [423]: recs.__array_interface__
Out[423]:
{'data': (37584304, False),
'strides': None,
'descr': [('', '<i8')],
'typestr': '<i8',
'shape': (2, 2),
'version': 3}
In [424]: x.__array_interface__
Out[424]:
{'data': (37614336, False),
'strides': None,
'descr': [('', '<i8')],
'typestr': '<i8',
'shape': (2, 2),
'version': 3}