python - 高级切片 : Given a list of index, 从 numpy 数组中选取不同的元素

标签 python python-3.x numpy slice

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

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

现在我有一个 list ,其中包含我每天要选择的水果:

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

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

最佳答案

使用列表理解

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)

['apple', 'orange', 'watermelon']

使用 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)

['apple', 'orange', 'watermelon']

关于python - 高级切片 : Given a list of index, 从 numpy 数组中选取不同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062676/

相关文章:

python - 使用 os.walk 对文件进行排序,然后仅对文件夹中的第一个文件运行一个函数

python - numpy.distutils 对架构的奇怪选择

python - 使用 numpy 或 scipy 的 sympy 代码的运行时优化

python - 如何在 Python 中矢量化点积?

python - 通过 Selenium 和 python 切换到 iframe

python - 如何使用线程来创建多个独立的可重用对象实例?

python - 如何根据最高概率从列表中获取值?

python - 使用无循环的numpy在二维数组中堆叠每2个数组

python - 按顺序指定数量的 1 和 0 的 Numpy 数组

python - 如何接受python json字典中的任何键?