Массивы Numpy имеют элементы, которые имеют одинаковый базовый тип.По сути, это C язык массивы (и их тип данных должен быть одинаковым для всех элементов).
Вы можете проверить это, используя атрибут .dtype
, например:
import numpy as np
a = np.array([1.5, 2, 3])
print(a.dtype)
даст вам np.float64
, даже если два элемента вставлены как int
s
Если вы хотите проверить, может ли определенный float
быть int
(например, 2 и3 в приведенном выше примере), вы не должны этого делать, поскольку точность с плавающей запятой может быть проблемой.
Если вы действительно настаиваете, вы можете использовать np.isclose
, чтобы получить логический массив, указывающий, является ли каждый float
элемент находится достаточно близко к его полу int
аналог, и это может быть castable без слишком большой потери в точности:
# For example above, e.g. [1.5, 2, 3]
print(np.isclose(np.floor(a), a))
даст вам [False, True, True]
, что означает второе и третьеэлемент мог быть брошен.Еще раз, я советую вам не делать этого.
РЕДАКТИРОВАТЬ: Если у вас есть логический массив Numpy, приведенный к np.float, нет способа вернуть его обратно, так как вы не можете различитьbool
приведено к float
и int
приведено к float
с , если int имеет значение 0
или 1
.