2015-12-01 76 views
0

我想根据字典重新映射numpy数组。 让我们假设我有一个N行和3列的numpy数组。现在我想根据在字典中用元组写的索引重新映射这些值。 这工作得很好:将numpy arrarys重新映射到字典

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

我没有检查它的效率,你可能是对的。 –