Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从索引列表中检索数组元素_Python - Fatal编程技术网

Python 从索引列表中检索数组元素

Python 从索引列表中检索数组元素,python,Python,我有一个数组my_array包含一些元组数据 我有另一个长度相同的数组my_array_value,其中包含一些整数值 对于my\u array\u values的每个唯一值,我希望从my\u array中检索与my\u array\u values中的此值位于同一索引中的值列表。以下是我的代码和预期行为: my_array = np.array([('AA','11'),('BB','22'),('CC','33'),('DD','44'),('EE','55'),('FF','66')])

我有一个数组
my_array
包含一些元组数据

我有另一个长度相同的数组
my_array_value
,其中包含一些整数值

对于
my\u array\u values
的每个唯一值,我希望从
my\u array
中检索与
my\u array\u values
中的此值位于同一索引中的值列表。以下是我的代码和预期行为:

my_array = np.array([('AA','11'),('BB','22'),('CC','33'),('DD','44'),('EE','55'),('FF','66')])
my_array_values = np.array([1,2,3,1,3,2])
my_array_values_unique = np.array([1,2,3])

for v in my_array_values_unique:
    print(np.take(my_array, np.where(my_array_values == v)))
预期行为:

[('AA', '11'), ('DD', '44')]
[('BB', '22'), ('FF', '66')]
[('CC', '33'), ('EE', '55')]
但实际上,我的代码提供了以下输出:

[['AA' '22']]
[['11' '33']]
[['BB' 'CC']]

有人能告诉我如何获得正确的输出吗?

请在使用
np时使用
axis=0
。在这种情况下使用
。默认情况下,它会使数组变平,这就是为什么案例“1”会得到“AA”和“22”。

请在使用
np时使用
axis=0
。在这种情况下使用
。默认情况下,它会使数组变平,这就是为什么案例“1”会得到“AA”和“22”。

您根本不需要使用
take
where
。数组的相等性检查返回一个布尔数组,该数组是有效的索引数组:

对于my_数组中的v值\u唯一:
打印(我的数组[我的数组\u值==v])
这张照片是:

['AA''11']
['DD'44']]
[['BB'22']
['FF'66']]
[['CC''33']
['EE'55']]

如果没有具体要求
numpy
,也可以使用列表轻松完成:

lst=[('AA','11'),('BB','22'),('CC','33'),('DD','44'),('EE','55'),('FF','66')]
idxs=[1,2,3,1,3,2]
对于集合中的v(idxs):
打印([idx的tup,如果idx==v,则zip中的tup(idxs,lst)])
给出:

[('AA','11'),('DD','44')]
[('BB','22'),('FF','66')]
[('CC','33'),('EE','55')]

另一种更有效的方法是使用循环列表一次,而不是对每个唯一值循环一次:

导入集合
mapping=collections.defaultdict(列表)
对于tup,zip中的idx(lst,idxs):
映射[idx]。追加(tup)
对于mapping.values()中的lst:
打印(lst)
  • 给出与以前相同的结果

    • 您根本不需要使用
      take
      where
      。数组的相等性检查返回一个布尔数组,该数组是有效的索引数组:

      对于my_数组中的v值\u唯一:
      打印(我的数组[我的数组\u值==v])
      
      这张照片是:

      ['AA''11']
      ['DD'44']]
      [['BB'22']
      ['FF'66']]
      [['CC''33']
      ['EE'55']]
      

      如果没有具体要求
      numpy
      ,也可以使用列表轻松完成:

      lst=[('AA','11'),('BB','22'),('CC','33'),('DD','44'),('EE','55'),('FF','66')]
      idxs=[1,2,3,1,3,2]
      对于集合中的v(idxs):
      打印([idx的tup,如果idx==v,则zip中的tup(idxs,lst)])
      
      给出:

      [('AA','11'),('DD','44')]
      [('BB','22'),('FF','66')]
      [('CC','33'),('EE','55')]
      

      另一种更有效的方法是使用循环列表一次,而不是对每个唯一值循环一次:

      导入集合
      mapping=collections.defaultdict(列表)
      对于tup,zip中的idx(lst,idxs):
      映射[idx]。追加(tup)
      对于mapping.values()中的lst:
      打印(lst)
      
      • 给出与以前相同的结果

      我不确定,但如果您使用NumPy数组,它将返回数组中数组的列表,因此您不会从中获取任何元组,除非您再次操作它

      我不确定,但是,如果您使用NumPy数组,它将返回数组中数组的列表,因此您不会从中获取任何元组,除非您再次操作它

      是否有特定原因使用numpy而不是标准Python列表?是否有特定原因使用numpy而不是标准Python列表?