#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}