将1d数组预先放在3d数组的每个2d数组上

时间:2016-06-07 22:19:28

标签: python numpy

说我的大小为(2,3,2)数组a,大小为(2)数组b。

import numpy as np

a = np.array([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]])
b = np.array([0.2, 0.8])

数组a如下所示:

array a

我想使用numpy例程将b连接到a中每个2d arrray的第一行来制作数组

b array

我似乎无法使concatenatevstackappend等工作。

2 个答案:

答案 0 :(得分:2)

试试这个:

np.concatenate(([[b]]*2,a),axis=1)
# Result:
array([[[  0.2,   0.8],
        [  1. ,   2. ],
        [  3. ,   4. ],
        [  5. ,   6. ]],

       [[  0.2,   0.8],
        [  7. ,   8. ],
        [  9. ,  10. ],
        [ 11. ,  12. ]]])

答案 1 :(得分:1)

这有效:

np.insert(a.astype(float), 0, b, 1)

输出:

array([[[  0.2,   0.8],
        [  1. ,   2. ],
        [  3. ,   4. ],
        [  5. ,   6. ]],

       [[  0.2,   0.8],
        [  7. ,   8. ],
        [  9. ,  10. ],
        [ 11. ,  12. ]]])

如果您不首先使用astype()进行投射,那么您最终会预先[0, 0]

注意,这比concatenate()

$ python test.py
m1: 8.20246601105 sec
m2: 43.8010189533 sec

代码:

#!/usr/bin/python

import numpy as np
import timeit

a = np.array([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]])
b = np.array([0.2, 0.8])

def m1():
    np.concatenate(([[b]]*2,a),axis=1)

def m2():
    np.insert(a.astype(float), 0, b, 1)

print "m1: %s sec" % timeit.timeit(m1)
print "m2: %s sec"  % timeit.timeit(m2)