2015-12-23 2 views
1

В numpy легко получить 2.7 от np.array([2.7]), но я застреваю при попытке получить значение 2.7 из массива вроде этого: np.array(2.7).Как получить 2.7 из np.array (2.7)?

Как я могу получить значение 2.7?

Более конкретно, мне нужна функция

def get(a): 
    ...... 

так что get(np.array(2.7))=2.7. Есть идеи?

ответ

4
In [1]: import numpy 

In [2]: a = numpy.array(2.7) 

In [3]: a[()] 
Out[3]: 2.7000000000000002 

Вы можете думать о том, почему вы даже есть 0-мерный массив, хотя. Они немного странны, и может быть немного сложно, если операции с массивом 0D производят скаляр или массив.

(Дополнительный ...02 вы видите, потому что 2,7 не точно представима в плавающей точкой, индексации массивов дает Numpy скаляры вместо скаляров Python, и дисплей логики Numpy немного отличается от языка Python.)

0

np.array(2.7) - это нулевой размерный массив. Вы не можете индексировать в них:

>>> arr = np.array(2.7) 
>>> arr[0] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: 0-d arrays can't be indexed 

Для большинства практических целей, вы можете использовать эти массивы так же, как вы бы использовать обычный поплавок или целые числа.

>>> arr*2 
5.4000000000000004 
>>> arr+1 
3.7000000000000002 
>>> float(arr) 
2.7 

В ответ на ваш комментарий:

Что такое интуиция, что 0-измерение?

Ну, один пример, где вы могли видеть, что он обращается к атрибуту массива shape.

>>> arr.shape 
() 
>>> np.array([2.7]).shape 
(1,) 
+0

Спасибо. Я вижу, вы указываете. Но какова интуиция, что np.array (2.7) является 0-мерной? – zell

+0

@zell: подсчитайте слои вложенных скобок. Не видите? Это 0D. – user2357112

+0

Хотя вы можете использовать массивы 0-d в качестве нормальных чисел, вы все еще работаете с точностью, установленной для вас numpy. Например, 'a = np.array (2); a ** 40'. Однако 'a.item()' вернет Python int и 'a.item() ** 40' даст вам длинный результат. (Протестировано на Python 2.7 с помощью Numpy 1.8.1) – Reti43