如何用二维替换列表替换二维numpy数组中的行?

时间:2014-02-26 21:07:55

标签: python numpy

这是我正在使用的一个更大问题的非常简化的示例。如何在二维numpy数组中替换多行?例如,我有一个数组......

main_list = array( [[ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]])

我有一个索引列表......

indexes = array([3, 6, 2])

我有一个替换列表,它们的长度始终与索引列表相同。

substitutions = array( [[ 2.4  5.2]
                        [ 10.1  1.3]
                        [ 5.6  9.5]])

我想......

main_list = array( [[ 0.  0.]
                    [ 0.  0.]
                    [ 5.6  9.5]
                    [ 2.4  5.2]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 10.1  1.3]
                    [ 0.  0.]
                    [ 0.  0.]
                    [ 0.  0.]])

现在我正在......

for i, ind in enumerate(indexes):
    main_list[ind] = substitutions[i]

请记住,这是一个简单的例子,在我正在做的生产版本中,所有这些列表的长度都会很大。有没有更快的方法来进行这些替换?感谢。

1 个答案:

答案 0 :(得分:2)

main_list[indexes,:] = substitutions

我对计时的尝试表明这比你发布的快3倍

In [51]: %%timeit
for i, ind in enumerate(indexes):
    main_list[ind] = substitutions[i]
   ....:
100000 loops, best of 3: 6.83 us per loop

In [52]: %timeit main_list[indexes,:] = substitutions
100000 loops, best of 3: 2.27 us per loop