
На основе графика следующее объяснение:
Входной dtype с более высоким типом определяет тип результирующего dtype. Результирующий dtype имеет минимально возможную точность и не отображается слева от любого входного dtype на диаграмме.
и учитывая тот факт, что нам нужно выбрать поле с желтой рамкой при объединении целочисленного значения с чем-то другим (см. текст в правом верхнем углу графика), мы можем ожидать, что тип вывода следующих операций будет np.complex128. Я их протестировал, ожидания оправдались.
Код: Выделить всё
complex(1+1j)+np.int8(1.0) # = np.complex128(2+1j)
complex(1+1j)+np.int16(1.0) # = np.complex128(2+1j)
complex(1+1j)+np.int32(1.0) # = np.complex128(2+1j)
complex(1+1j)+np.int64(1.0) # = np.complex128(2+1j)
Код: Выделить всё
complex(1+1j)+np.float16(1.0) # = np.complex64(2+1j)
complex(1+1j)+np.float32(1.0) # = np.complex64(2+1j)
Код: Выделить всё
complex(1+1j)+np.float64(1.0) # returns (2+1j), ie a Python scalar, not a np.complex128 value
Почему суммирование комплексного значения и значения np.float64 дает комплексное значение вместо значения np.complex128?
В настоящее время я могу придумать правдоподобное объяснение: 1) Я делаю что-то неправильно, т. е. не проверяю то, что я думаю, что тестирую 2) я неправильно понимаю график или в нем есть больше нюансов, чем я сейчас знаю 3) график неправильный (крайне маловероятно).