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列表?