2016-05-17 1 views
1

Я знаю, что это очень классический вопрос, но после прохождения многих сообщений я решил вернуть его, не имея возможности найти элегантное решение для чего-то вроде основного. Проблема:Из словаря счетчика python в массив nd numpy

У меня есть словарь счетчика из большого набора данных, с содержательными целыми ключами, и целые вхождения:

co = Counter({8046: 1360, 10046: 1248, 11046: 1024}) 

И я просто хочу закончить с базовым целым массивом:

a = np.array([[8046,1360],[10046,1248],[11046,1024]]) 

специфика этой проблемы (или отсутствие специфичности) является то, что у меня есть целые ключи, и я не нужен структурированный массив. Следующий

dtype = dict(names = ['id','data'], formats=['i8','i8']) 
array = np.fromiter(iter(co.items()), dtype=dtype) 

не вполне удовлетворительна, в конечном итоге с

a = [(8046, 1360) (10046, 1248) (11046, 1024)] 

Является ли это просто вопрос DTYPE? Большое спасибо!

ответ

2

Вы могли бы превратить его в список списка перед преобразованием в Numpy массива:

>>> np.array(list(co.items())) 
array([[ 8046, 1360], 
     [10046, 1248], 
     [11046, 1024]]) 
+0

Да! Я потерял себя в этих типах и итераторах, забыв об основах. Поэтому комбинация np.array (list()) позволяет нам указывать типы dtypes. Теперь я блуждаю, почему «np.fromiter» настолько жестко об этом, но, я думаю, я просто что-то пропустил. Спасибо @kennytm. – Etienne

+0

Если я не ошибаюсь, вместо 'list (co.items())' должно быть достаточно простого 'co.items()'. – JRodDynamite

+1

@JRodDynamite 'np.array (co.items())' создает массив объектов вместо 2D-массива. 'array (dict_items ([(8046, 1360), (10046, 1248), (11046, 1024)]), dtype = object)' – kennytm

Смежные вопросы