猿问

高级切片:给定一个索引列表,从一个 numpy 数组中挑选不同的元素

我正在实施一个决策算法。在daily_choices数组中,每天有两种水果可供选择,例如:


daily_choices = np.array([['apple','orange'],['strawberry','orange'],['watermelon','apple']])

现在我有一个包含我每天要选择的水果的清单:


decision = [0,1,0] 

我知道一些基本的切片,例如daily_choices[:,0],这意味着将第一列切出,并且daily_choices[:,1]意味着将第二列切出。


我想知道是否可以通过执行以下操作来切片第一行的第一列,第二行的第二列,第三行的第一列


预期结果

Input  =>  daily_choices[:,[0,1,0]]

Output =>  ['apple', 'orange', 'watermelon']

然而,它并没有给我想要的结果


我知道我可以通过使用zip和 for来达到我想要的结果loop


daily_decision

daily_decision = []

for choices, index in zip(daily_choices, decision):

    daily_decision.append(choices[index])

daily_decision

但我想知道是否可以在一行中完成。


HUH函数
浏览 196回答 2
2回答

慕斯王

使用列表理解choices = [['apple', 'orange'], ['strawberry', 'orange'], ['watermelon', 'apple']]decisions = [0, 1, 0] daily_decisions = [day[decision] for day, decision in zip(choices, decision)]print(daily_decisions)['苹果','橙色','西瓜']使用 numpy这也可以通过NumPys Integer Array Indexing解决:import numpy as npdaily_choices = np.array([['apple','orange'],['strawberry','orange'],['watermelon','apple']])decisions = [0, 1, 0]daily_decision = daily_choices[range(len(daily_choices)), decisions]print(daily_decision)['苹果','橙色','西瓜']

有只小跳蛙

纯粹使用numpy:import numpy as npdaily_choices = np.array([['apple', 'orange'],['strawberry', 'orange'],['watermelon', 'apple']])decision = np.array([0, 1, 0])n_fruits = 2fruit_range = np.reshape(np.arange(n_fruits), (-1, n_fruits))indices = np.reshape(decision, (len(decision), 1)) == fruit_rangedaily_choices[indices]输出:array(['apple', 'orange', 'watermelon'], dtype='<U10')
随时随地看视频慕课网APP

相关分类

Python
我要回答