pythonically为1D数组中的每个元素创建第三维的新2D数组

时间:2017-08-31 20:56:27

标签: python arrays numpy matrix

假设您有两个大小相同的1D阵列 a=[1,8,4,5,9] b=[1,8,4,5,9] 然后对于a和b中的每个第i个元素,你能创建一个新的数组吗?
其中H是矩阵矩阵,H(i)以第三维堆叠?

我尝试过使用numpys np.dstack,但似乎它会处理单独输入的每个新元素。
使用for循环执行此操作将是微不足道的,但我相信它们在python中很慢,因此希望以pythonic方式执行此操作,如果可能的话,使用numpy。

然后对于H[0],我们会[[1,16,16],[1,7,1],[1,4,2]] 同样对于H[1],我们会[[64,16,16],[64,56,64],[8,32,16]]

1 个答案:

答案 0 :(得分:1)

使用column_stack堆叠计算结果,然后reshape

a=np.array([1,8,4,5,9])
b=np.array([1,8,4,5,9])
​
np.column_stack((
    a ** 2, 2 * a, 2 * a,
    b * a,  7 * a, b * a,
    b,      4 * b, 2 * b  
)).reshape(-1,3,3)

Out[468]:
array([[[ 1,  2,  2],
        [ 1,  7,  1],
        [ 1,  4,  2]],

       [[64, 16, 16],
        [64, 56, 64],
        [ 8, 32, 16]],

       [[16,  8,  8],
        [16, 28, 16],
        [ 4, 16,  8]],

       [[25, 10, 10],
        [25, 35, 25],
        [ 5, 20, 10]],

       [[81, 18, 18],
        [81, 63, 81],
        [ 9, 36, 18]]])