python - 高级切片:给定索引列表,从 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
and 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)
['苹果','橙子','西瓜']
使用 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)
['苹果','橙子','西瓜']
推荐阅读
- c++ - 为什么数组最后会打印不同的元素?
- javascript - 使用 Javascript 解析来自 Api GET 请求的 JSON 数据
- python - ValueError: 层序贯_2 的输入 0 与层不兼容:预期 ndim=5,发现 ndim=4。收到的完整形状:(无、10、250、250)
- android - 如何在kotlin中实现双向数据绑定
- spring-boot - 如何在 Neo4j 的 Neo4jRepository 上为“使用定期提交”提供自动提交事务?
- firebase - 无法使用 Flutter Web 应用从 Firestore 检索数据
- javascript - 在同一页面上发布文本而不使用 FETCH 刷新并将数据发送到数据库
- python - 如何让用户为嵌入命令选择十六进制颜色?| 不和谐.py
- arrays - 使用 putchar 函数打印出数组时出现问题。获得大量符号作为输出
- python - 在 Google App Engine 上同步和异步 Python FastAPI 脚本