>>> import numpy as np
>>> X = np.arange(27).reshape(3, 3, 3)
>>> x = [0, 1]
>>> X[x, x, :]
array([[ 0, 1, 2],
[12, 13, 14]])
我需要将它沿0
维度求和,但在现实世界中,矩阵是巨大的,我更愿意沿-1
维度求和,这由于内存布局而更快。因此,我希望将结果转置:
array([[ 0, 12],
[ 1, 13],
[ 2, 14]])
我怎么做?我希望 numpy 的“高级索引”的结果被隐式转置。最后明确地转.T
置它甚至更慢,不是一种选择。
Update1:在现实世界中,高级索引是不可避免的,并且下标不保证相同。
>>> x = [0, 0, 1]
>>> y = [0, 1, 1]
>>> X[x, y, :]
array([[ 0, 1, 2],
[ 3, 4, 5],
[12, 13, 14]])
Update2:为了澄清这不是XY 问题,这里是实际问题:
我有一个大矩阵X
,其中包含x
来自某些概率分布的元素。元素的概率分布取决于元素的邻域。这个分布是未知的,所以我遵循Gibbs 抽样程序来构建一个矩阵,其中包含来自这个分布的元素。简而言之,这意味着我对矩阵进行了一些初步猜测X
,然后我不断迭代矩阵的元素,并使用取决于 的相邻值的公式X
更新每个元素。因此,对于矩阵的任何元素,我需要获取其邻居(高级索引)并对它们执行一些操作(在我的示例中求和)。我用过x
x
line_profiler
看到在我的代码中花费大部分时间的行是取数组相对于维度的总和,0
而不是-1
. 因此,我想知道是否有一种方法可以通过高级索引生成已经转置的矩阵。