【问题标题】:Faster approach extracting lower triangle of multidimensional array using Numpy?使用 Numpy 提取多维数组下三角形的更快方法?
【发布时间】:2020-11-18 14:04:02
【问题描述】:

假设一个形状为 4,4,1,1 的 4D 数组。目标是提取(n, m) 数组的下三角形。

目前,以下依赖于 for 循环的代码可以完成这项工作。

import numpy as np
lw_up_pair = np.tril_indices(4, -1)
arr=np.zeros((4,4,1,1))

arr[1,:1,:,0]=1
arr[2,:2,0,0]=2
arr[3,:3,0,0]=3

ext=[arr [x, i, :, 0] for x,i in zip(lw_up_pair [0],lw_up_pair [1])] # expected output

不过不知道有没有更快的或者numpy内置的方法可以达到类似的效果?

【问题讨论】:

  • 邮编是np.stack(lw_up_pair, -1)

标签: python numpy indexing


【解决方案1】:

只要做:

rows, cols = lw_up_pair
ext = arr[rows, cols, :, 0]
print(ext)

输出

[[1.]
 [2.]
 [2.]
 [3.]
 [3.]
 [3.]]

【讨论】:

    【解决方案2】:

    你也可以这样做:

    arr[lw_up_pair][:, 0]
    
    array([[1.],
           [2.],
           [2.],
           [3.],
           [3.],
           [3.]])
    

    【讨论】:

    • 聪明。潜在的缺点是你不能分配给这个表达式。
    • 你总是可以只分配给arr[lw_up_pair],因为剩下的只是为了得到正确的维度数量,你很确定广播是正确的。
    【解决方案3】:

    由于我们在迭代改进索引表达式:

    arr[(*np.tril_indices(4, -1), slice(None), 0)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多