【问题标题】:Numpy: Replacing part of array by another entire array based on selected indexNumpy:根据所选索引将部分数组替换为另一个完整数组
【发布时间】:2021-10-10 23:20:50
【问题描述】:

我有两个 np 数组 A 和 B 以及一个索引列表,其中:

A = np.arange(12).reshape(3,2,2)
>>> A
array([[[ 0,  1],
        [ 2,  3]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 8,  9],
        [10, 11]]])

>>> B:
array([[[10, 10],
        [10, 10]],

       [[20, 20],
        [20, 20]]])

index_list = [0,2]

我想根据 index_list 给出的索引将数组 A 替换为整个数组 B,即 0 和 2(对应于 A 在 axis=0 处的索引):

# desired output:
array([[[ 10,  10],
        [ 10,  10]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 20,  20],
        [20, 20]]])

我一直在考虑以更有效的方式实现这个过程,但只想出了两个循环:

row_count = 0
for i,e in enumerate(A):
    for idx in index_list:
        if i == idx:
            A[i,:,:] = B[row_count,:,:]
            row_count += 1

这是计算昂贵的,因为我有两个巨大的 np 数组要处理......如果有人知道如何以矢量化方式或更有效的方式实现这个过程,我们将不胜感激。谢谢!

【问题讨论】:

  • A[index_list] 是否给出了您要替换的元素?
  • 是的,没错,A[index_list] 将被整个 B 替换。
  • A[index_list]=B 做你想做的事吗?
  • 是的,这也有帮助,谢谢!

标签: python arrays numpy indexing numpy-slicing


【解决方案1】:

你试过这样分配吗:

A[index_list[0]] = B[0]
A[index_list[1]] = B[1]

我猜如果您在index_list 中有更多的索引,并且要替换更多,那么您可以创建一个循环。

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2021-10-13
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2019-07-29
    • 2021-01-22
    • 2022-11-07
    • 1970-01-01
    相关资源
    最近更新 更多