Это то, что подразумевается под комментарием в вашем коде, который говорит, что test_matrix
является «представлением».Представление не имеет своей собственной копии данных.Скорее он разделяет базовые данные исходного массива.Представления не обязательно должны быть всего массива, но могут быть небольшими подразделами массива.Эти подразделы даже не обязательно должны быть смежными, если просмотр выполняется по шагам.например.
a = np.arange(10)
b = a[::2] # create a view of every other element starting with the 0-th
assert list(b) == [0, 2, 4, 6, 8]
assert a[4] == 4
b[2] = -1
assert a[4] == -1
Представления являются мощными, поскольку они позволяют выполнять более сложные операции без необходимости копировать большие объемы данных.Отсутствие необходимости постоянно копировать данные может означать, что некоторые операции выполняются быстрее, чем в противном случае.
Осторожно, не все операции с индексами создают представления.например.
a = np.arange(10, 20)
b = a[[1,2,5]]
assert list(b) == [11, 12, 15]
b[0] == -1
assert a[1] != -1