[英]Python numpy 2D array sum over certain indices
有一个像这样的二维数组:
img = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[2, 2, 2], [3, 2, 3], [6, 7, 6]],
[[9, 8, 1], [9, 8, 3], [9, 8, 5]]
]
我只想得到某些索引的总和,如下所示:
indices = [[0, 0], [0, 1]] # which means img[0][0] and img[0][1]
# means here is represents
在这个链接中有一个关于 stackoverflow 中一维数组的类似问题,但是当我尝试使用print(img[indices])
时出现错误。 因为我想明确表示img
的元素是那些由索引表示的元素,然后得到意思是总和。
预期 output
[5, 7, 9]
使用 NumPy:
import numpy as np
img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5, 7, 9])
当你提供一个花哨的索引时,索引元组的每个元素代表一个不同的轴。 索引 arrays 的形状广播到您得到的 output 的形状。
在您的情况下, indices.T
的行是每个轴的索引。 您可以将它们转换为索引元组和 append slice(None)
,它是:
的编程等价物。 您可以直接取结果二维数组的平均值:
img[tuple(indices.T) + (slice(None),)].sum(0)
另一种方法是使用 splat 运算符:
img[(*indices.T, slice(None))].sum(0)
如果结果是 [5, 7, 9],它是列表列的总和。 然后很容易:
img = np.asarray(img)
indices = [[0, 0], [0, 1]]
img[(indices)].sum(axis = 0)
结果:
array([5, 7, 9])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.