2015-07-30 2 views
1

Я назначаю элементы массива numpy равным вычитанию «малых» значений, чисел типа float python. Когда я это сделаю и попытаюсь проверить результаты, напечатав в командной строке, массив будет указан как все нули. Вот мой код:Массивная решетка? вычитание малых поплавков

import numpy as np 
np.set_printoptions(precision=20) 

pc1x = float(-0.438765) 
pc2x = float(-0.394747) 

v1 = np.array([0,0,0]) 

v1[0] = pc1x-pc2x 

print pc1x 
print pc2x 
print v1 

Результат выглядит следующим образом:

-0.438765 
-0.394747 
[0 0 0] 

Я ожидал, что это для v1:

[-0.044018 0 0] 

Я новичок в Numpy, я признаю, что это может быть очевидное неправильное понимание того, как работают numpy и float. Я думал, что изменение параметров печати numpy будет исправлено, но не повезло. Любая помощь велик! Благодаря!

ответ

4

Вы объявляете массив с v1 = np.array([0,0,0]), который numpy предполагает, что вы хотите использовать массив int. Любые последующие действия на нем будут поддерживать этот статус массива int, поэтому после добавления вашего небольшого элемента с числами, он возвращается к int (что приводит ко всем нулям). Объявить его

v1 = np.array([0,0,0],dtype=float) 

Там целое богатство Numpy конкретных/платформу конкретных типов данных для NumPy, которые подробно описаны в dtype docs page.

1

Вы создаете массив с целочисленным типом данных (так как вы не указали его , NumPy использует тип исходных данных, которые вы ему дали). Сделать это поплавок:

>>> v1 = np.array([0,0,0], dtype=np.float) 
>>> v1[0] = pc1x-pc2x 
>>> print v1 
[-0.04401800000000000157 0.      0.     ] 

Или изменить входящий тип данных:

>>> v1 = np.array([0.0, 0.0, 0.0]) 
>>> v1[0] = pc1x-pc2x 
>>> print v1 
[-0.04401800000000000157 0.      0.     ] 
Смежные вопросы