2015-12-01 4 views
0

Я хочу переназначить массив numpy в соответствии со словарем. Предположим, у меня есть массив numpy с N строками и 3 столбцами. Теперь я хочу переназначить значения в соответствии с его индексами, которые записаны в кортежах в словаре. Это прекрасно работает:Перемещение numpy arrariess в словарь

import numpy as np 

a = np.arange(6).reshape(2,3) 
b = np.zeros(6).reshape(2,3) 
print a 
print A 

dictt = { (0,0):(0,2), (0,1):(0,1), (0,2):(0,0), (1,0):(1,2), (1,1):(1,1), (1,2):(1,0) } 

for key in dictt: 
    b[key] = a[dictt[key]] 

print b 
a = [[0 1 2] 
    [3 4 5]] 

b = [[ 2. 1. 0.] 
    [ 5. 4. 3.]] 

Допустим, у меня есть N строк, где N является четным числом. Теперь я хочу применить одно и то же сопоставление (которое справедливо для этих двух строк в верхнем примере) ко всем остальным строкам. Поэтому я хочу, чтобы иметь массив из:

[[ 0 1 2] 
[ 3 4 5] 
[ 6 7 8] 
[ 9 10 11]] 

к:

b = [[ 2. 1. 0.] 
    [ 5. 4. 3.]] 
    [[ 8. 7. 6.] 
    [ 11. 10. 9.]] 

Любые идеи? Я хотел бы сделать это быстро, так как это 192000 записей в каждом массиве, которые должны быть переназначены.

+0

В python2 или python3? –

+0

Значит, порядок, определенный в вашем словаре, произволен? Или вы всегда хотите отразить свои данные? Потому что были бы более эффективные способы без использования словаря, тогда ... (numpy.fliplr) – elzell

+0

Спасибо, что согласен. Это Python 2.7. К сожалению, порядок случайный, а не зеркальный. – pallago

ответ

0

Для простоты я бы просто использовал [:: - 1].

a = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] 
b = [item[::-1] for item in a] 
>>> b 
[[2, 1, 0], [5, 4, 3], [8, 7, 6]] 
+0

Как было сказано выше: Поскольку a - массив numpy, b = np.fliplr (a) должен быть наиболее эффективным способом. – elzell

+0

Я не проверял его на эффективность, вы, вероятно, правы. –

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

  • Нет связанных вопросов^_^