Вы имеете право на псевдоним и глубокое копирование (хотя копирование значений массива в for
-петле обычно не считается хорошим способом сделать это).
С другой стороны, Numpy view
не указательЭто намного более тяжелая вещь, и сам по себе экземпляр объекта.Концептуально, это самая близкая вещь к фактическому указателю на массив, который существует в Python (хотя семантика, конечно, различна) и может выполнять некоторые из тех же ролей в вашем коде.Представление никогда не будет таким же производительным, как необработанный указатель, так как представление должно содержать набор данных, таких как форма и шаг, которые могут отличаться от данных его «родительского» массива.
Вклс другой стороны, массивы и представления Numpy обертывают __array_interface__
, который, в свою очередь, оборачивает указатель на базовый буфер, в котором хранятся фактические данные.Поэтому, когда вы создаете новое представление массива, вы в конечном итоге делаете правильную поверхностную копию базовых данных, поскольку вы создаете копию указателя на эти данные (хотя и через несколько уровней переноса и косвенного обращения).