Numpy Multiply Size

时间:2016-01-07 04:31:32

标签: python numpy

给出一个numpy 3-d数组

[[[1][4]][[7][10]]]

假设第一行是1 4,第二行是7 10.如果我的乘数为3,则第一行到第三行将变为1 1 1 4 4 4,第4行将变为7 7 7 10 10 10,即:

[[[1][1][1][4][4][4]][[1][1][1][4][4][4]][[1][1][1][4][4][4]][[7][7][7][10][10][10]][[7][7][7][10][10][10]][[7][7][7][10][10][10]]]

在numpy中有快速的方法吗?我使用的实际数组在底层有3或4个元素而不是1,因此[1][1][1]可能是[1,8,7][1,8,7][1,8,7],但我在这里简化了它。

1 个答案:

答案 0 :(得分:1)

numpy.repeat听起来就像你想要的那样。

以下是一些例子:

>>> a = numpy.array( [[[1,2,3],[4,5,6]], [[10,20,30],[40,50,60]]] )
>>> a
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[10, 20, 30],
        [40, 50, 60]]])
>>>
>>> a.repeat( 3, axis=0 )
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 1,  2,  3],
        [ 4,  5,  6]],

       [[10, 20, 30],
        [40, 50, 60]],

       [[10, 20, 30],
        [40, 50, 60]],

       [[10, 20, 30],
        [40, 50, 60]]])
>>>
>>> a.repeat( 3, axis=1 )
array([[[ 1,  2,  3],
        [ 1,  2,  3],
        [ 1,  2,  3],
        [ 4,  5,  6],
        [ 4,  5,  6],
        [ 4,  5,  6]],

       [[10, 20, 30],
        [10, 20, 30],
        [10, 20, 30],
        [40, 50, 60],
        [40, 50, 60],
        [40, 50, 60]]])
>>>
>>> a.repeat( 3, axis=2 )
array([[[ 1,  1,  1,  2,  2,  2,  3,  3,  3],
        [ 4,  4,  4,  5,  5,  5,  6,  6,  6]],

       [[10, 10, 10, 20, 20, 20, 30, 30, 30],
        [40, 40, 40, 50, 50, 50, 60, 60, 60]]])

根据所需的输出形状,您可能希望将多个.repeat()的调用与axis个值联系起来。