繁体   English   中英

Python numpy 二维数组和某些索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM