有没有更好的方法从"input_array"和"select_id"获取"output_array"?
我们可以摆脱range( input_array.shape[0] )?
>>> input_array = numpy.array( [ [3,14], [12, 5], [75, 50] ] )
>>> select_id = [0, 1, 1]
>>> print input_array
[[ 3 14]
[12 5]
[75 50]]
>>> output_array = input_array[ range( input_array.shape[0] ), select_id ]
>>> print output_array
[ 3 5 50]
Run Code Online (Sandbox Code Playgroud) 我有一个numpy矩阵:
>>> A = np.matrix('1 2 3; 5 1 6; 9 4 2')
>>> A
matrix([[1, 2, 3],
[5, 1, 6],
[9, 4, 2]])
Run Code Online (Sandbox Code Playgroud)
我想获得每行中最大值的索引以及值本身.我可以使用A.argmax(axis = 1)得到最大值的索引,在这种情况下我会得到:
>>> indices = A.argmax(axis=1)
>>> indices
matrix([[2],
[2],
[0]])
Run Code Online (Sandbox Code Playgroud)
如何使用'indices'数组来获取矩阵中每行的最大值数组?有什么方法可以更有效地或在一次操作中做到这一点?是否有一个函数可以返回值及其行和列坐标?
我有一个形状为 (m, n) 的二维 numpy 数组、矩阵。我的实际用例有 m ~ 1e5 和 n ~ 100,但为了有一个简单的最小示例:
matrix = np.arange(5*3).reshape((5, 3))
Run Code Online (Sandbox Code Playgroud)
我有一个整数索引数组 idx,形状为 (m, ),每个条目都在 [0, n) 之间。此数组指定应从matrix 的每一行中选择哪一列。
idx = np.array([2, 0, 2, 1, 1])
Run Code Online (Sandbox Code Playgroud)
所以,我试图从第 0 行选择第 2 列,从第 1 行选择第 0 列,从第 2 行选择第 2 列,从第 1 行选择第 1 列,从第 4 行选择第 1 列。因此最终答案应该是:
correct_result = np.array((2, 3, 8, 10, 13))
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下,这是直观的,但不正确:
incorrect_result = matrix[:, idx]
Run Code Online (Sandbox Code Playgroud)
上面的语法所做的是将 idx 逐行应用为花哨的索引数组,从而产生另一个形状为 (m, n) 的矩阵,这不是我想要的。
这种类型的花式索引的正确语法是什么?
如何从给定指示符列向量的二维数组中检索列向量?
假设我有
X = np.array([[1, 4, 6],
[8, 2, 9],
[0, 3, 7],
[6, 5, 1]])
Run Code Online (Sandbox Code Playgroud)
和
S = np.array([0, 2, 1, 2])
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方式来获得X结果S,array([1, 9, 3, 1])这相当于
np.array([x[s] for x, s in zip(X, S)])
Run Code Online (Sandbox Code Playgroud)