我正在执行决策算法.在daily_choices数组中,每一天都有两个结果可供选择,例如:
daily_choices = np.array([['apple','orange'],['strawberry',['watermelon','apple']])
现在,我有了一个清单,其中包含每天要选择的水果:
decision = [0,1,0]
我知道一些基本的切片,例如daily_choices [:,0],这意味着将第一列切片,而daily_choices [:,1]意味着将第二列切片.
我想知道是否可以通过执行以下操作来切片第一行中的第一列,第二行中的第二列,第三行中的第一列
预期结果
Input => daily_choices[:,[0,0]]
Output => ['apple','orange','watermelon']
然而,它并没有给我想要的结果
我知道我可以通过使用zip和for循环来达到我想要的结果
daily_decision
daily_decision = []
for choices,index in zip(daily_choices,decision):
daily_decision.append(choices[index])
daily_decision
但我想知道是否有可能一站式完成.
最佳答案
使用列表理解
choices = [['apple','apple']]
decisions = [0,0]
daily_decisions = [day[decision] for day,decision in zip(choices,decision)]
print(daily_decisions)
[‘apple’,‘orange’,‘watermelon’]
使用numpy
这也可以用NumPys Integer Array Indexing解决:
import numpy as np
daily_choices = np.array([['apple','apple']])
decisions = [0,0]
daily_decision = daily_choices[range(len(daily_choices)),decisions]
print(daily_decision)
[‘apple’,‘watermelon’]