小编ith*_*140的帖子

2D numpy数组搜索(相当于Matlab的交叉'rows'选项)

我有两个4列numpy数组(2D),每行有几百个(浮点)行(cap和usp).考虑每个数组中3列的子集(例如capind=cap[:,:3]):

  1. 两个数组之间有许多常见的行.
  2. 每行元组/"三元组"在每个阵列中都是唯一的.

我正在寻找一种有效的方法来识别两个阵列中这些常见的三个值(行)子集,同时保留两个阵列中的第4列以进行进一步处理.从本质上讲,我正在寻找一种很好的numpy方式来做相当于Matlab的交叉函数和行选项(即([c, ia, ib]=intersect(capind, uspind, 'rows');).

它返回匹配行的索引,因此现在从原始数组(matchcap=cap[ia,:])的第4列获取匹配的三元组和值是微不足道的.


我目前的做法是基于论坛上的类似问题,因为我找不到与我的问题相匹配的问题.但是,考虑到我的目标,这种方法似乎有点低效(我还没有完全解决我的问题):

数组是这样的:

cap=array([[  2.50000000e+01,   1.27000000e+02,   1.00000000e+00,
      9.81997200e-06],
   [  2.60000000e+01,   1.27000000e+02,   1.00000000e+00,
      9.14296800e+00],
   [  2.70000000e+01,   1.27000000e+02,   1.00000000e+00,
      2.30137100e-04],
   ...,
   [  6.10000000e+01,   1.80000000e+02,   1.06000000e+02,
      8.44939900e-03],
   [  6.20000000e+01,   1.80000000e+02,   1.06000000e+02,
      4.77729100e-03],
   [  6.30000000e+01,   1.80000000e+02,   1.06000000e+02,
      1.40343500e-03]])

usp=array([[  4.10000000e+01,   1.31000000e+02,   1.00000000e+00,
      5.24197200e-06],
   [  4.20000000e+01,   1.31000000e+02,   1.00000000e+00,
      8.39178800e-04],
   [  4.30000000e+01,   1.31000000e+02,   1.00000000e+00,
      1.20279900e+01],
   ...,
   [  4.70000000e+01,   1.80000000e+02,   1.06000000e+02,
      2.48667700e-02],
   [  4.80000000e+01,   1.80000000e+02,   1.06000000e+02,
      4.23304600e-03],
   [  4.90000000e+01,   1.80000000e+02,   1.06000000e+02,
      1.02051300e-03]])
Run Code Online (Sandbox Code Playgroud)

然后我将每个4列数组(usp和cap)转换为三列数组(capind和uspind如下所示为整数,以便于查看). …

python arrays numpy

5
推荐指数
1
解决办法
561
查看次数

标签 统计

arrays ×1

numpy ×1

python ×1