ND4J INDArray
нарезка выполняется одним из перегруженных методов get()
, как было дано в ответе java - Получить произвольный фрагмент массива Nd4j - Переполнение стека . Поскольку INDArray
принимает непрерывный блок собственной памяти, выполняет ли срез с использованием get()
копию исходной памяти (особенно срезание строк, в котором можно создать новый INDArray
с той же резервной памятью)?
Я нашел другой INDArray
метод subArray()
. Это имеет какое-то значение?
Я спрашиваю об этом, потому что я пытаюсь создать DatasetIterator
, который может напрямую извлекать данные из INDArray
s, и я хочу устранить возможные издержки. В исходном коде слишком много абстракции, и я сам не смог найти реализацию.
Аналогичный вопрос о NumPy задается в python - Numpy: просмотры и копирование путем разрезания - Переполнение стека , а ответ можно найти в Индексация - NumPy v1.16 Manual :
Эмпирическое правило здесь может быть следующим: в контексте индексации lvalue (т. Е. Индексы размещаются в левом значении присваивания), представление или копия массива не создаются (поскольку нет необходимости ). Однако с обычными значениями вышеупомянутые правила для создания представлений действительно применяются.