Почему numpy преобразует тип «объект»-«int» в тип «объект»-«float»?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему numpy преобразует тип «объект»-«int» в тип «объект»-«float»?

Сообщение Anonymous »

Это может быть ошибка или что-то, чего я не понимаю, когда numpy решает преобразовать типы объектов в массив «объектов».
X = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [1158941147679947299,0]
Y = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [11589411476799472995,0]
Z = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [115894114767994729956,0]
print(type(X[0]),X[0]) # 7047216832217320738
print(type(Y[0]),Y[0]) # 1.7477687161336848e+19
print(type(Z[0]),Z[0]) # 121782390452532103395

Сами массивы остаются объектного типа (как и ожидалось). Неожиданно объекты массива Y были преобразованы в «плавающие». Почему это происходит? В результате я сразу теряю точность в своей комбинаторике. Чтобы сделать ситуацию еще более странной, удаление 0 исправляет ситуацию:
X = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [1158941147679947299]
Y = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [11589411476799472995]
Z = np.array([5888275684537373439, 1945629710750298993],dtype=object) + [115894114767994729956]
print(type(X[0]),X[0]) # 7047216832217320738
print(type(Y[0]),Y[0]) # 17477687161336846434
print(type(Z[0]),Z[0]) # 121782390452532103395

Я пробовал и другие вещи, например, использовать большие/меньшие числа, но редко (если вообще когда-либо) получался «с плавающей запятой». В размере этих конкретных значений "int" есть что-то очень специфическое.

Лучший код, показывающий проблему.
import numpy as np
A = np.array([1,1],dtype=object) + [2**62,0]
B = np.array([1,1],dtype=object) + [2**63,0]
C = np.array([1,1],dtype=object) + [2**64,0]
D = np.array([1,1],dtype=object) + [2**63]
E = np.array([1,1],dtype=object) + [2**63,2**63]
print(type(A[0]),A[0]) # 4611686018427387905
print(type(B[0]),B[0]) # 9.223372036854776e+18
print(type(C[0]),C[0]) # 18446744073709551617
print(type(D[0]),D[0]) # 9223372036854775809
print(type(E[0]),E[0]) # 9223372036854775809


Подробнее здесь: https://stackoverflow.com/questions/786 ... float-type
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»