【发布时间】:2014-09-21 11:08:21
【问题描述】:
我想知道创建二维数组的最简单方法是什么,它的每一行都有另一个多维数组的索引。
例如,假设我有一个 4x4 的立方体,“索引矩阵”将如下所示:
np.concatenate([
np.expand_dims(curr.ravel(),axis=0).T
for curr
in np.meshgrid(
np.arange(4),
np.arange(4),
np.arange(4)
)
],axis=1)
结果如下:
array([[0, 0, 0],
[0, 0, 1],
[0, 0, 2],
[0, 0, 3],
[1, 0, 0],
[1, 0, 1],
...
[2, 3, 2],
[2, 3, 3],
[3, 3, 0],
[3, 3, 1],
[3, 3, 2],
[3, 3, 3]])
除了似乎第二列应该代替第一列这一事实之外,是否有更“numpythonic”的方式来以更紧凑的方式创建相同或相似的矩阵?
如果存在一个只接受任意多维数组并返回它的索引表的函数,那就太好了。
【问题讨论】:
-
最大的问题是:你为什么要这个?例如,如果您打算过滤索引数组然后使用它进行索引,那么有更好的方法来做到这一点。
-
我会尽量用几句话来解释我的目标:我需要测试一些存储在 3 维数组中的概率值。如果它们通过了一些测试条件,那么我会将它们添加到将在 3d 散点图中可视化的坐标列表中。更大的图景:我正在尝试为在 3 维(特征)中运行的线性判别分析分类器(多类)可视化决策边界。
-
好的,最简单的方法不是从
arr获取所有索引,然后根据arr中对应值通过测试条件的索引进行过滤;相反,只需将测试应用于arr以获取布尔数组,然后获取该布尔数组中真实值的索引。
标签: python arrays numpy matrix indices