2013-11-25 2 views
1

Как показано в следующем коде, массив empty заменяет мои значения int плавающими. Как я могу это предотвратить?Как сохранить значения int в массиве numpy.empty?

import numpy as np 
a=np.empty(3) 
a[0]=1 
a[1]=2 
a[2]=3 
print a 

Выход:

[1., 2., 3.] 
+1

В качестве примечания: Есть ли причина, что вам нужно использовать 'empty', а затем заполнить значения один за другим, вместо того, чтобы просто делать' а = np.array ([1, 2, 3]) '? Это позволило бы избежать проблемы, которую вы видите, поскольку по умолчанию 'dtype' для массива, построенного из последовательности, определяется значениями последовательности, поэтому вы получили бы' int'; когда он не знает значений, он не имеет никакой информации, поэтому он должен по умолчанию «float». – abarnert

+0

@abarnert, спасибо за запрос, но я должен вычислить значения, и для этого мне нужен цикл 'for'. Проблема в том, что она не делает это всегда. Например, 'numpy.asarray()' будет сохранять формат! – Cupitor

+1

Это точно точка: 'asarray' или' array' _can_ сохранить тип, потому что он _knows_ type; 'empty' _can't_ сохранить тип, потому что это не так. (Кроме того, вы можете легко превратить свой цикл 'for' в итератор, например, обернув его в функцию генератора, а затем передать итератору, например,« np.fromiter ». Или, конечно, создать« список » 'вместо этого перейти к' np.array'.) – abarnert

ответ

10

Укажите DTYPE при вызове np.empty:

a = np.empty(3, dtype='int') 

Если вы не укажете DTYPE, по умолчанию поплавок. Это вызов подписи np.empty:

empty(shape, dtype=float, order='C') 
+0

Но почему это заставляет его плавать автоматически?!?! – Cupitor

+4

Каждый массив NumPy имеет тип dtype. По умолчанию используется 'float'. – unutbu

+0

Кажется, орех всегда должен быть правдой, или, может быть, я запутался, потому что, например, 'numpy.asarray()' будет хранить формат int, если значения целые. – Cupitor

5

Использование dtype=int:

>>> a = np.empty(3, dtype=np.int) 
>>> a[0]=1 
>>> a[1]=2 
>>> a[2]=3 
>>> a 
array([1, 2, 3]) 

В качестве значения по умолчанию для dtype является float для numpy.empty, поэтому ваши присвоенные значения конвертируется в float.

empty(...) 
    empty(shape, dtype=float, order='C') 
Смежные вопросы