Я заметил, что, в отличие от slice
, использование range
для индексации массива не приводит к просмотру массива numpy.
import numpy as np
a = np.zeros((3, 3))
s = slice(1, 3)
b = a[1, s]
b[:] = 1
print(a)
# [[0. 0. 0.]
# [0. 1. 1.]
# [0. 0. 0.]]
r = range(1, 3)
b = a[1, r]
b[:] = 1
print(a)
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
Существуют ли быстрые / элегантные способы преобразования range
в slice
, кроме использования .start, .stop, .step
вручную?
def range2slice(r):
return slice(r.start, r.stop, r.step)
Или есть способ, которым я получить numpy, чтобы получить представление, даже если я использую range
для индексации массива?
В основном я хочу объект, который я могу перебрать в AND, который создает представление при использовании в качестве индекса.