Python 如何从两个不同的numpy阵列创建numpy阵列?

Python 如何从两个不同的numpy阵列创建numpy阵列?,python,arrays,numpy,Python,Arrays,Numpy,我想从两个不同的凹凸阵列创建一个凹凸阵列。例如: 假设我有两个数组a和b a = np.array([1,3,4]) b = np.array([[1,5,51,52],[2,6,61,62],[3,7,71,72],[4,8,81,82],[5,9,91,92]]) 我希望它循环遍历数组a中的每个索引,在数组b中找到它,然后将b行保存到c中。如下图所示: c = np.array([[1,5,51,52], [3,7,71,72],

我想从两个不同的凹凸阵列创建一个凹凸阵列。例如:

假设我有两个数组a和b

a = np.array([1,3,4])

b = np.array([[1,5,51,52],[2,6,61,62],[3,7,71,72],[4,8,81,82],[5,9,91,92]])
我希望它循环遍历数组a中的每个索引,在数组b中找到它,然后将b行保存到c中。如下图所示:

c = np.array([[1,5,51,52],
              [3,7,71,72],
              [4,8,81,82]])
我尝试过:

c=np.zeros(shape=(len(b),4))

for i in b:
    c[i]=a[b[i][:]]  
但是得到这个错误“用作索引的数组必须是整数(或布尔)类型”

方法#1

如果排序了
a
,我们可以使用-

idx = np.searchsorted(a,b[:,0])         
idx[idx==a.size] = 0
out = b[a[idx] == b[:,0]]
样本运行-

In [160]: a
Out[160]: array([1, 3, 4])

In [161]: b
Out[161]: 
array([[ 1,  5, 51, 52],
       [ 2,  6, 61, 62],
       [ 3,  7, 71, 72],
       [ 4,  8, 81, 82],
       [ 5,  9, 91, 92]])

In [162]: out
Out[162]: 
array([[ 1,  5, 51, 52],
       [ 3,  7, 71, 72],
       [ 4,  8, 81, 82]])
如果
a
未排序,我们需要将
sorter
参数与
searchsorted
一起使用


方法#2

我们也可以使用-


如果数组b具有不属于a的其他索引,该怎么办?@cryptofish在问题中添加此类情况的示例?@cryptofish如何处理
a
中不匹配的行。是否应在输出
c
中丢弃它们?是。我只想包含a的匹配项,并在c中放弃其余的匹配项。
b[np.in1d(b[:,0],a)]