Как преобразовать массив Nnumpy в словарь на Python?

#arrays #python-3.x #numpy #dictionary

Вопрос:

Привет, ребята, как бы я продолжил преобразование массивов numpy как таковых:

 [[  8.82847075  -5.70925653]
 [  1.07032615  -1.77975378]
 [-10.41163742  -0.33042086]
 [  0.23799394   5.5978591 ]
 [  7.7386861   -4.16523845]]
 

К тому, что я хочу в Python 3.10. Это включает в себя округление ключей и значений до ближайшего целого числа:

 {'9':-6, '1':-2, '-10':0, '0':6, '8':-4} 
 

Ответ №1:

Должно сработать следующее

 a = np.round(a)
d = dict(zip(a[:, 0].astype(str), a[:, 1]))
 

Примечание: Равные ключи будут объединены.

Комментарии:

1. Что вы подразумеваете под «Равные ключи сольются»? Разве это не характерно для словарей, где все ключи должны быть уникальными, или я ошибаюсь?

2. Да! Я имею в виду, что если ключ появляется дважды, то последний заменит первый. Например, если а=[[1, 2], [1, 3]], тогда d={‘1’: 3}.

Ответ №2:

 dict(zip(*d.round().astype(int).T))
Out: {9: -6, 1: -2, -10: 0, 0: 6, 8: -4}
 

Данные

 d = np.array([[  8.82847075,  -5.70925653],
       [  1.07032615,  -1.77975378],
       [-10.41163742,  -0.33042086],
       [  0.23799394,   5.5978591 ],
       [  7.7386861 ,  -4.16523845]])
 

Ответ №3:

Вы можете преобразовать массив в словарь без какой-либо внешней библиотеки. этот метод использует понимание списка:

предположим, что входной массив находится в поле in_array, а выходной словарь-в поле out_dict

 out_dict = {int(x[0]):int(x[1]) for x in in_array}