Это может быть ошибка или что-то, чего я не понимаю, когда 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
Почему numpy преобразует тип «объект»-«int» в тип «объект»-«float»? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как преобразовать список[int, int, int] в кортеж[int, int, int], а не в кортеж[int, ...]
Anonymous » » в форуме Python - 0 Ответы
- 289 Просмотры
-
Последнее сообщение Anonymous
-