У меня были проблемы с использованием numpy.average, каждый раз возникала ошибка, пока я не преобразовал входные данные в numpy.float64s. Я посмотрел на источник, и это из-за следующего поведения, в чем причина разницы?
>>> f, f32 = numpy.float(1.0), numpy.float32(1.0)
>>> (f == 1.0).any()
Traceback (most recent call last):
File "<pyshell#80>", line 1, in <module>
(f == 1.0).any()
AttributeError: 'bool' object has no attribute 'any'
>>> (f32 == 1.0).any()
True
3 ответа
Это потому, что объект numpy.float32
не возвращает объект bool
при сравнении с __eq__
, а объект numpy.bool_
.
>>> type((f == 1.0))
<type 'bool'>
>>> type((f32 == 1.0))
<type 'numpy.bool_'>
Обычно вам не нужно использовать выражения вроде numpy.float(1.0)
.
Самая распространенная базовая операция в numpy
- создать массив.
f = np.array([1.0, 1.23])
mf = f.mean() # or
mf = np.mean(f)
Или с целыми числами
f = np.array([1, 3, 5, 3, 5])
f==3
(f==3).any()
Обратите внимание, что я использую целые числа с ==
тестом. Тест ==
не очень хорошая идея при использовании чисел с плавающей точкой.
Я мог бы пойти дальше и указать dtype
:
f = np.arange(5, dtype=int)
f = np.ones((3,4), dtype=float)
Отдельные элементы этих массивов будут иметь тип np.float
, np.int
и т. Д. Редко возникает необходимость в непосредственном создании np.float(1.23)
. Укажите dtype
при создании массива, но в противном случае пусть numpy
позаботится об этих деталях.
>>> type(numpy.float32(1.0))
<type 'numpy.float32'>
>>> type(numpy.float(1.0))
<type 'float'>
>>> type(numpy.float32(1.0) == 1.0)
<type 'numpy.bool_'>
>>> type(numpy.float(1.0) == 1.0)
<type 'bool'>
numpy.float32
и numpy.bool_
используются не только для хранения скалярного, но и векторного:
>>> numpy.float32([1.0, 2.0])
array([ 1., 2.], dtype=float32)
>>> numpy.float32([1.0, 2.0]) == 1.0
array([ True, False], dtype=bool)
Так что в numpy.bool_
есть функция any()
, чтобы проверить, является ли какой-либо из элементов Истиной.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.