Это способ (единственный способ) индексирования массива 0d:
In [475]: x=np.array(21)
In [476]: x
Out[476]: array(21)
In [477]: x.shape
Out[477]: ()
In [478]: x[()]
Out[478]: 21
В действительности он вытягивает элемент из массива. item()
- это другой способ:
In [479]: x.item()
Out[479]: 21
In [480]: x.ndim
Out[480]: 0
В
x = np.load(lc_path, allow_pickle=True)[()]
скорее всего np.save
был задан не массив; и обернут в массив dtype объекта 0d, чтобы сохранить его. Это способ восстановления этого объекта.
In [481]: np.save('test.npy', {'a':1})
In [482]: x = np.load('test.npy', allow_pickle=True)
In [483]: x
Out[483]: array({'a': 1}, dtype=object)
In [484]: x.ndim
Out[484]: 0
In [485]: x[()]
Out[485]: {'a': 1}
В общем, когда мы индексируем nd-массив, например, x[1,2]
, мы действительно делаем x[(1,2)]
, то есть, используя кортеж, соответствующий числу размеров. Если x
равен 0d, единственный работающий кортеж - пустой, ()
.