Range Builder `r_` - срез со сложным (но не мнимым) шагом; величина используется
Игра с конкатенацией NumPy и строительным объектом диапазона r_
Я наткнулся на следующее поведение: по-видимому, сложный шаг, независимо от того, является ли реальный, мнимый или правильный комплекс, имеет абсолютное значение, принятое за число шагов в linspace
как
>>> import numpy as np
>>>
>>> np.r_[0:12:4] # start : stop : step
array([0, 4, 8]) # that's expected
>>> np.r_[0:12:4j] # start : stop : imaginary step
array([ 0., 4., 8., 12.]) # that's in the docs
>>> np.r_[0:12:4+0j] # real step of complex type ?
array([ 0., 4., 8., 12.]) # this is not as far as I can tell
# you can even do stuff like
>>> np.r_[0:12:-4+3j] # proper complex step ?
array([ 0., 3., 6., 9., 12.])
Вопрос: Я просто хотел узнать, является ли это официальной функцией, потому что я не смог найти ее документированной.
Почему это актуально? Что ж, r_
В первую очередь это удобство сохранения нажатия клавиш. В некоторых случаях эта функция может сэкономить вам несколько символов.
1 ответ
Код принимает абсолютное значение:
if isinstance(step, complex):
size.append(int(abs(step)))
но это не документированная гарантия. Документы гарантируют поведение только для мнимых чисел, а не для произвольных комплексных чисел:
если шаг является мнимым числом (т. е. 100j), то его целочисленная часть интерпретируется как желаемое количество точек, а начало и конец включаются
Вы не должны полагаться на поведение для не чисто мнимых сложных входных данных, так как это не является документированной гарантией.
Тем не менее, возможно, что это было задумано как гарантия. Самая дальняя спина, которую я смог отследить numpy.r_
код это коммит. (Это не то, где он возник - я могу найти ссылки на scipy.r_
начиная еще дальше - но, несмотря на поиск ссылок на scipy.r_
Я не смог найти код для scipy.r_
и я подозреваю, что ни хранилища SciPy, ни NumPy GitHub не содержат оригинального кода. Похоже, что это был бы правильный коммит, за исключением того, что GitHub, похоже, имеет только фрагмент оригинального не-Git коммита.)
r_
не был задокументирован в самом раннем коммите, к которому я могу отследить, но mgrid
также присутствовал в этом коммите, и mgrid
аналогичное поведение для комплексных чисел было задокументировано в том коммите как
However, if the step length is a COMPLEX NUMBER (e.g. 5j), then the integer
part of it's magnitude is interpreted as specifying the number of points to
create between the start and stop values, where the stop value
IS INCLUSIVE.
Самое дальнее, что мне удалось отследить numpy.r_
Документация по этому коммиту 7 лет спустя, с пометкой "Merge from doc wiki". Я полагаю, что вики-документация исчезла, и я не смог определить, кто изначально предоставил эти документы, но, вероятно, эти документы не были основаны на первоначальном намерении numpy.r_
автор