我有一个2d的numpy数组,我想对其进行两次迭代。这个想法是对除数组本身以外的每一对数组组合执行操作,例如:
其中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解决方案吗?谢谢
答案 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)
打印整个内容,而忽略不需要的值,或者如果您将这些值传递给其他东西,则可以在此阶段忽略它们。