我有一个二维数组:
>>> input = np.array([[1,2],[3,4]])
>>> input
array([[1, 2],
[3, 4]])
我也有这个数组,其列数与输入数组相同,每行包含从输入数组的匹配列中提取的索引。
>>> indices = np.array([[0],[1]])
>>> indices
array([[0],
[1]])
在这个例子中,我想得到以下数组作为输出:
array([[1],
[4]])
我能以任何方式实现这一目标吗?
答案 0 :(得分:3)
通过NumPy数组索引的一种方法。
date val1 val2 val3 val4
1 2018-06-07 AAA 26512.0 123 1.0
3 2018-06-07 AAA 26543.0 123 0.0
请注意,我们需要确保行和列索引器具有相同的形状,在本例中为A = np.array([[1,2],[3,4]])
idx = np.array([[0],[1]])
res = A[np.arange(A.shape[0])[:, None], idx]
print(res)
[[1]
[4]]
,其中(n, 1)
是行数。
答案 1 :(得分:1)
你可以试试这个:
#!python
# -*- coding: utf-8 -*-#
#
# Imports
import numpy as np
arr = np.array([[1,2],[3,4]])
idx = np.array([[0],[1]])
ans = arr[idx,idx]
print(ans)
这回答了OP的具体问题,但是,如果我们想要更一般的回答,请遵循@jpp的想法,并且这样做:
# Imports
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
idx = np.array([0, 1, 1])
col_vec1 = np.arange(arr.shape[0])[:, None]
col_vec2 = idx[:, None]
ans = arr[col_vec1, col_vec2]
print(arr[0, 0]) # 1
print(arr[1, 1]) # 5
print(arr[2, 1]) # 8
print(ans)
答案 2 :(得分:0)
您可以先剪切索引:
in_array=np.arange(20).reshape(4,5)
ind=np.array([[0,2],[1,3]])
in_array[ind[:,0],ind[:,1]]
array([2, 8])
也不要使用input
这样的名称,因为它们是python的内置函数,你要覆盖它们。