我有两个3D NumPy数组:

a = np.array([[[1, 2, 3],
               [4, 5, 6]],

              [[7, 8, 9],
               [10, 11, 12]],

              [[13, 14, 15],
               [16, 17, 18]]])

b = a + 100

1个1D数组:

c = np.array([0, 1, 0])

我想创建另一个3D数组,它的元素来自ab,基于c,即如果c0取自a,如果1取自b.

结果应该是:

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

       [[107, 108, 109],
        [110, 111, 112]],

       [[ 13, 14,  15],
        [ 16, 17,  18]]])

因为我只想使用numpy而不使用其他,所以我try 使用np.where,但结果不是我想要的:

>>> np.where(c==0, a, b)

array([[[  1, 102,   3],
        [  4, 105,   6]],

       [[  7, 108,   9],
        [ 10, 111,  12]],

       [[ 13, 114,  15],
        [ 16, 117,  18]]])

有什么建议吗?

推荐答案

您只需要将c提升到所需的维度:

np.where(c[:, None, None]==0, a, b)
[[[  1   2   3]
  [  4   5   6]]

 [[107 108 109]
  [110 111 112]]

 [[ 13  14  15]
  [ 16  17  18]]]

Python相关问答推荐

大Pandas 胚胎中产生组合

DataFrame groupby函数从列返回数组而不是值

当多个值具有相同模式时返回空

使用索引列表列表对列进行切片并获取行方向的向量长度

有症状地 destruct 了Python中的regex?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

在Pandas DataFrame操作中用链接替换'方法的更有效方法

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

avxspan与pandas period_range

在ubuntu上安装dlib时出错

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何指定列数据类型

具有相同图例 colored颜色 和标签的堆叠子图

根据客户端是否正在传输响应来更改基于Flask的API的行为

我如何处理超类和子类的情况

大型稀疏CSR二进制矩阵乘法结果中的错误

组颠倒大Pandas 数据帧

多个布尔条件的`jax.lax.cond`等效项

对列中的数字进行迭代,得到n次重复开始的第一个行号