【问题标题】:Remapping numpy arrarys to dictionary将numpy数组重新映射到字典
【发布时间】:2016-03-05 16:06:54
【问题描述】:

我想根据字典重新映射一个 numpy 数组。 让我们假设我有一个 N 行 3 列的 numpy 数组。现在我想根据它的索引重新映射值,这些索引写在字典中的元组中。 这工作正常:

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 是偶数。现在我想将相同的映射(对上例中的那 2 行有效)应用于所有其他行。 因此我想有一个数组来自:

[[ 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 个条目应该重新映射。

【问题讨论】:

  • 在 python2 或 python3 中?
  • 那么您的字典中定义的顺序是任意的吗?还是您总是想镜像您的数据?因为在不使用字典的情况下会有更有效的方法......(numpy.fliplr)
  • 感谢您的建议。它是 Python 2.7。不幸的是,顺序是随机的,没有镜像。

标签: numpy dictionary reshape remap


【解决方案1】:

为简单起见,我将只使用 [::-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]]

【讨论】:

  • 如上所说:因为a是一个numpy数组,所以b = np.fliplr(a)应该是最有效的方式。
  • 效率我没检查过,你可能是对的。
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2023-01-01
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多