我正在 python/numpy 中做一些机器学习工作,其中我想用一维 ndarray 索引一个二维 ndarray,这样我就可以得到一个带有索引值的一维数组。
我让它与一些丑陋的代码一起工作,我想知道是否有更好的方法,因为对于像 python+numpy 这样好的语言和模块组合来说,这似乎不自然。
a = np.arange(50).reshape(10, 5) # Array to be indexed
b = np.arange(9, -1, -2) # Indexing array
print(a)
print(b)
print(a[b, np.arange(0, a.shape[1]).reshape(1,a.shape[1])])
#Prints:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]
[35 36 37 38 39]
[40 41 42 43 44]
[45 46 47 48 49]]
[9 7 5 3 1]
[[45 36 27 18 9]]
这正是我想要的(即使技术上是二维数组),但这看起来非常复杂。有没有更整洁的方法?
编辑:澄清一下,我实际上并不想要一个一维数组,这解释得非常糟糕。我实际上确实想要长度为 1 的一维,因为这是我稍后处理它所需要的,但这可以通过 reshape()
语句轻松实现。抱歉造成混淆,我只是将实际代码与更一般的问题混合在一起。
您想要一个一维数组,但包含了一个 reshape
调用,其唯一目的是将数组从您想要的格式转换为您不想要的格式。
停止 reshape arange
输出。此外,您不需要显式指定 0
起始值:
result = a[b, np.arange(a.shape[1])]
我是一名优秀的程序员,十分优秀!