python - 生成包含另一个 NumPy 数组索引的 NumPy 数组

标签 python arrays numpy indices

我想为另一个 NumPy 数组的给定形状生成一个 np.ndarray NumPy 数组。前一个数组应包含后一个数组的每个单元格的相应索引。

示例 1

假设我们有 a = np.ones((3,)),其形状为 (3,)。我预计

[[0]
 [1]
 [2]]

因为a中有a[0]a[1]a[2]可以通过索引 012 访问它们。

示例 2

对于像 b = np.ones((3, 2)) 这样的 (3, 2) 形状,已经有很多东西要写了。我预计

[[[0 0]
  [0 1]]

 [[1 0]
  [1 1]]

 [[2 0]
  [2 1]]]

因为b中有6个单元格,可以通过相应的索引b[0][0]b[0][1]访问 表示第一行,b[1][0]b[1][1] 表示第二行,b[2] [0]b[2][1] 为第三行。因此我们得到 [0 0], [0 1], [1 0], [1 1][2 0][2 1] 位于生成数组中的匹配位置。

非常感谢您抽出时间。如果我能以任何方式澄清这个问题,请告诉我。

最佳答案

使用 np.indicesnp.stack 实现此目的的一种方法:

np.stack(np.indices((3,)), -1)

#array([[0],
#       [1],
#       [2]])

np.stack(np.indices((3,2)), -1)

#array([[[0, 0],
#        [0, 1]],
#       [[1, 0],
#        [1, 1]],
#       [[2, 0],
#        [2, 1]]])

np.indices 返回一个索引网格数组,其中每个子数组代表一个轴:

np.indices((3, 2))

#array([[[0, 0],
#        [1, 1],
#        [2, 2]],        
#       [[0, 1],
#        [0, 1],
#        [0, 1]]])

然后使用np.stack转置数组,为来自不同轴的每个元素堆叠索引:

np.stack(np.indices((3,2)), -1)

#array([[[0, 0],
#        [0, 1]],
#       [[1, 0],
#        [1, 1]],
#       [[2, 0],
#        [2, 1]]])

关于python - 生成包含另一个 NumPy 数组索引的 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142160/

相关文章:

python - 使用 NaNs 计算 numpy 数组中的移动平均值

python - python 上的 bash 扩展模块

python - 如何在同一行中分隔多个正则表达式匹配项

python - 自动化轮类时间,同时考虑限制

Python:loadtxt:从文件中读取数字数据和注释行

python - 从 4 个角颜色插值的二维颜色渐变(256x256 矩阵)

python - .astype ("int") 或 .astype(int)?有和没有引号/双引号之间有什么区别吗?

python - 从一个数组中删除另一个数组中的所有数字

ios - 遍历 NSDictionary 并将其保存到对象类型的数组中

javascript - 从带有通配符的对象中删除属性