为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-11-30 15:42:14
我正在实施一个决策算法。在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来达到我想要的结果loopdaily_decisiondaily_decision = []for choices, index in zip(daily_choices, decision):    daily_decision.append(choices[index])daily_decision但我想知道是否可以在一行中完成。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超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 np

daily_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)

['苹果','橙色','西瓜']


查看完整回答
反对 回复 2021-11-30
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

纯粹使用numpy:


import numpy as np


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

decision = np.array([0, 1, 0])


n_fruits = 2


fruit_range = np.reshape(np.arange(n_fruits), (-1, n_fruits))

indices = np.reshape(decision, (len(decision), 1)) == fruit_range


daily_choices[indices]

输出:


array(['apple', 'orange', 'watermelon'], dtype='<U10')


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信