首页 > 解决方案 > 在 3D 阵列中替换 2D 子阵列

问题描述

我有以下 3D 数组(形状 = (3,3,3)):

a = array([[[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]],
   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]],
   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]]])

现在我想用 2D 数组替换 3D 数组中的第 0 个 2D 层

b = array([[0, 1, 0],
   [1, 0, 0],
   [0, 0, 1]])

, 这样

a = array([[[ 0.,  1.,  0.],
        [ 1.,  0.,  0.],
        [ 0.,  0.,  1.]],
       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],
       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

我可以使用 np.insert(a,0,b,axis=0) 并随后删除 3D 数组中的最后一个 2D 图层,但这似乎并不优雅。

标签: python-3.xnumpy

解决方案


import numpy as np

a = np.array([[[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]],
   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]],
   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.],
    [ 0.,  0.,  0.]]])
b = np.array([[0, 1, 0],
   [1, 0, 0],
   [0, 0, 1]])
a[0] = b
a

输出:

array([[[0., 1., 0.],
        [1., 0., 0.],
        [0., 0., 1.]],

       [[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       [[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]]])

干杯


推荐阅读