Как связать элементы внутри 2-D массива с другим списком на основе индекса в python? - PullRequest
0 голосов
/ 06 апреля 2020

Элементы внутри каждого массива в sample_array представляют индекс. Как мне изменить эти элементы так, чтобы результаты были похожи на final_array?

sample_array = [np.array([5, 3, 2]), np.array([4, 0, 1, 6])
sample_list = [element_0, element_1, element_2, element_3, element_4, element_5, element_6]
final_array = [np.array([element_5, element_3, element_2]), np.array([element_4, element_0, element_1, element_6])

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Вы можете сделать это следующим образом:

np.array([[sample_list[i] for i in row] for row in sample_array])

Подробнее см. Документацию np.array .

0 голосов
/ 06 апреля 2020

Другой идеей было бы объединить понимание списка и itemgetter. Нам нужно использовать itemgetter вместо обычного оператора среза, так как мы хотим извлечь элементы из списка с произвольными индексами, согласно вашему вводу:

# sample inputs
In [18]: sample_arr = [np.array([5, 3, 2]), np.array([4, 0, 1, 6])] 
In [19]: sample_list = [10, 11, 12, 13, 14, 15, 16]  

In [20]: from operator import itemgetter

Мы используем понимание единого списка, где мы повторяем элементы в списке sample_arr и используйте itemgetter для нарезки. Это вернуло бы вызываемый объект, в который мы передали бы список, из которого нужно выбрать элементы (т.е. sample_list). Наконец, нам нужно обернуть результат в np.array(), так как вам нужен список массивов, аналогичный вводу.

final_array = [np.array(itemgetter(*arr.tolist())(sample_list)) for arr in sample_arr]  

In [22]: final_array 
Out[22]: [array([15, 13, 12]), array([14, 10, 11, 16])]
0 голосов
/ 06 апреля 2020

Вы можете изменить список на массив numpy и затем использовать свои индексы:

sample_array = [np.array([5, 3, 2]), np.array([4, 0, 1, 6])]
sample_list = np.array(['element_0', 'element_1', 'element_2', 'element_3', 'element_4', 'element_5', 'element_6'])

sample_list = np.array(sample_list)

print([sample_list[sa] for sa in sample_array])
[array(['element_5', 'element_3', 'element_2'], dtype='<U9'),
 array(['element_4', 'element_0', 'element_1', 'element_6'], dtype='<U9')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...