python - 基于其他 Array 访问 Numpy Array
问题描述
我有一个大小为 [2, 10] 的 numpy 数组 A。我有另一个长度为 10 的数组 B,其值介于 0 和 1 之间。我现在想访问 A,为每一列获取 B 指定的行,这意味着:输出的长度应该为 10,即第 i 个条目如果 B[i] == 0,则结果数组为 A[0, i],否则为 A[1, i]。我如何正确/最优雅地索引?谢谢。
解决方案
您可以numpy.choose
为此使用:
>>> a
array([[ -3, 2, 5, 0, -2, 12, 5, -1, -12, 5],
[ -8, -12, 15, 6, 2, -3, 4, -17, 0, 7]])
>>> b
array([1, 0, 0, 1, 1, 1, 1, 1, 0, 1])
>>> np.choose(b, a)
array([ -8, 2, 5, 6, 2, -3, 4, -17, -12, 7])
这里第一个参数b
是包含选项值的数组,下一个参数是每个选项值的二维数组。
如您所见,对于索引i
where b[i] == 0
,然后是第一行的相应值a[0][i]
,对于b[i] == 1
,我们得到a[1][i]
。这可以很容易地推广到更多的值。
或者我们可以使用numpy.where
和传递子数组:
>>> np.where(b, a[1], a[0])
array([ -8, 2, 5, 6, 2, -3, 4, -17, -12, 7])
推荐阅读
- azure-web-app-service - Azure Function 与具有 Windows 身份验证的应用服务的连接
- android - ember 错误仅在cordova/phonegap 中运行时发生
- html - 荷兰语语言环境:输入(数字)金额格式
- c# - Microsoft 互操作:Word 将 .doc 与 .docx c# 进行比较
- bash - 如何使用 bash 将 pdf 转换为 png 文件?
- javascript - babel-loader 仅用于将 es6 转换为 es5?
- r - 合并两个数据框
- postgresql - 我应该使用哪个 JDBC 驱动程序版本来访问 PostgreSQL 9.5?
- python - 导入tensorflow时出错;说缺少几个模块
- javascript - 从具有指定颜色的列表中选择两个元素作为左右元素