不包括一个索引位置的2d numpy数组和

4bbkushb  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(110)

我想计算2D numpy数组的总和,但不包括一个索引位置,例如数组:

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

当我想排除[2][1]的位置时,结果将是12。我的for循环函数工作:

def num_order(arr):
    tot = 0
    for row in range(len(arr)):
        for col in range(len(arr)):
            if row != exclude_x or col != exclude_y:
                tot += base[row][col]
    return tot

但我需要更简洁的方式来表达

kzmpq1sx

kzmpq1sx1#

我认为最快的方法是将它们全部相加,然后减去该特定值:

def num_order(arr, exclude_x: int, exclude_y: int):
    return np.sum(arr) - arr[exclude_x, exclude_y]

为什么这样会快很多?许多numpy方法都是用C实现的,并利用了向量化技术。因此,使用这些函数而不是使用python for循环迭代所能做的一切都要快得多。

fdx2calv

fdx2calv2#

也许你可以把所有的东西加起来,然后减去你不想要的元素

np.sum(array) - array[row, col]

相关问题