Python 在三维阵列的每个二维阵列上预先添加一维阵列

Python 在三维阵列的每个二维阵列上预先添加一维阵列,python,numpy,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如下所示: 我想使用numpy例程将b连接到a中每个二维阵列的第一行,以生成数组 我似乎无法使串联、vstack、附加等工作正常。试试这个: np.concatenate(([[b]]*2,a),ax

假设我有下面的大小
(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
如下所示:

我想使用numpy例程将
b
连接到
a
中每个二维阵列的第一行,以生成数组

我似乎无法使
串联
vstack
附加
等工作正常。

试试这个:

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. ]]])
这项工作:

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]

注意,这比
连接()要慢:

代码:

$ 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)