遍历numpy数组,除了同一元素

时间:2020-01-23 17:02:18

标签: python numpy

我有一个2d的numpy数组,我想对其进行两次迭代。这个想法是对除数组本身以外的每一对数组组合执行操作,例如:

enter image description here

其中B是numpy数组,由4个元素组成的36个数组

  [[  9.106593 279.82645  192.9962   381.61804 ]
   [  9.106593 279.82645  192.9962   381.61804 ]]

L是36个数组元素的元素,例如:

  [1,2,.......,35]

有人可以帮助我使用广播找到一些优雅的numpy解决方案吗?谢谢

1 个答案:

答案 0 :(得分:0)

我认为您最快的方法是对所有对执行运算,然后仅打印您感兴趣的结果。我假设运算与您给出的乘法示例一样简单。

我将举一个使用meshgrid来处理1d数组的示例,然后将其扩展到2d。

a = np.array([1, 2, 3, 4]
print(a)
>>> array([1, 2, 3, 4])

x, y = np.meshgrid(a, a)
print(x)
>>> array([[1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4]])
print(y)
>>> array([[1, 1, 1, 1],
           [2, 2, 2, 2],
           [3, 3, 3, 3],
           [4, 4, 4, 4]])

z = x*y
print(z)
>>> array([[ 1,  2,  3,  4],
           [ 2,  4,  6,  8],
           [ 3,  6,  9, 12],
           [ 4,  8, 12, 16]])

现在,您要忽略的结果在对角线上,您可以打印每个元素,这样就可以省略它们。

height, width = z.shape
for h in range(height):
    for w in range(width):
        if h == w:
            continue  # Skips this one.
        print(z[h][z])

我不确定为什么要重复两次,所以可能是您只需要两个print语句或更复杂。如果您可以对此发表评论,我可以提出一些建议。

编辑: 我看到您添加了一条根本不需要循环的注释。您可以只用print(z)打印整个内容,而忽略不需要的值,或者如果您将这些值传递给其他东西,则可以在此阶段忽略它们。