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