Проверка Python dtype для массива - float или complex - PullRequest
1 голос
/ 08 июля 2019

Как я могу проверить, что массив NumPy, если с плавающей точкой или сложный dtype? Для простых примеров все следующие проверки работают нормально.

# these are True
a = np.zeros(10)
a.dtype == float
a.dtype == np.float
a.dtype == np.float64

b = np.zeros(10,dtype=complex)
b.dtype == complex
b.dtype == np.complex
b.dtype == np.complex128

Однако у меня есть массив dtype dtype('>f8'). Ни одно из предыдущих сравнений не идентифицирует его как массив с плавающей точкой. Насколько я вижу, проблема порядка (> vs. <) здесь. Существует ли какая-либо общая функция для проверки, является ли массив плавающим или сложным во всех вариациях? </p>

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Вы можете использовать функцию all() в сочетании с функцией isinstance().

Функция all() возвращает True, если все элементы списка имеют значение true, и вы можете проверить, является ли каждое число в вашем массиве пустых чисел с помощью isinstance().Поскольку isinstance() рассматривает '> f8' как число с плавающей точкой, сравнение не поднимает проблему, с которой вы столкнулись.

Вот как это выглядит:

b = np.zeros(10,dtype='>f8')
all(isinstance(x, float) for x in b)

Вывод:

True
1 голос
/ 08 июля 2019

Вы пробовали numpy.isrealobj() и np.iscomplexobj()?

Ваши примеры:

import numpy as np

a = np.zeros(10)
print(np.isrealobj(a)) # -> True
print(np.iscomplexobj(a)) # -> False

b = np.zeros(10,dtype=complex)
print(np.isrealobj(b)) # -> False
print(np.iscomplexobj(b)) # -> True

c=np.zeros(10, dtype='>f8')
print(np.isrealobj(c)) # -> True
print(np.iscomplexobj(c)) # -> False

В документации указано np.isrealobj(x):

ВозвратИстинно, если x не является комплексным типом или массивом комплексных чисел.

Проверяется тип ввода, а не значение.Таким образом, даже если вход имеет мнимую часть, равную нулю, isrealobj оценивается как False, если тип данных является сложным.

Существует также возможность проверки по значению: np.isreal и np.iscomplex.

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...