python - 基于 2d 数组填充 3d 数组的有效方法是什么?
问题描述
假设我有一个二维数组。
a = np.array([[0,2,3],[4,2,1]])
维度是number_of_instances * 3
,其中 2d 数组中的值表示 a 中的行索引pandas dataframe
。
我有一个dataframe
:
df = pd.DataFrame(np.array([[10, 10, 10, 10], [11, 11, 11, 11], [12, 12, 12, 12], [13, 13, 13, 13], [14, 14, 14, 14]]), columns = list('ABCD'))
Out[23]:
A B C D
0 10 10 10 10
1 11 11 11 11
2 12 12 12 12
3 13 13 13 13
4 14 14 14 14
现在我有一个零 3d 数组,我尝试用pandas dataframe
.
b = np.empty(2,3,4)
维度是number_of_instances * 3 * number_of_features
,其中由二维数组中的相应行索引number_of_features
提取。pandas dataframe
理想情况下,我希望 b 看起来像:
Out[24]:
array([[[10, 10, 10, 10],
[12, 12, 12, 12],
[13, 13, 13, 13]],
[[14, 14, 14, 14],
[12, 12, 12, 12],
[11, 11, 11, 11]]])
填充这个 3d 数组的最有效方法是什么?
解决方案
怎么样:
df.loc[a.ravel()].values.reshape((2,3,4))
输出:
array([[[10, 10, 10, 10],
[12, 12, 12, 12],
[13, 13, 13, 13]],
[[14, 14, 14, 14],
[12, 12, 12, 12],
[11, 11, 11, 11]]])
推荐阅读
- c - 比较两个字符串时出现错误“传递 'strcmp' 的参数 2 使指针来自整数而不进行强制转换”
- vim - 如何覆盖/重新定义 Vim 搜索命令
- c# - 使用 Entity Framework Core 在代码中删除多个 ListView SelectedItems
- excel - 查询表在尚未完成时打开 Excel 文件(VB.NET)
- wordpress - 通过 URL 添加 WooCommerce 优惠券
- amazon-ec2 - Ansible -- 在动态清单中使用 Ec2 标签中的条件
- javascript - 匹配字符串,除非以字符开头和结尾
- javascript - 如何使用 puppeteer 自动化 Amazon Connect CCP 登录?
- angular - 如何调用多个 URL 并只处理使用 RxJS 返回的第一个值?
- hadoop - 如何在 Hue Cloudera 上的 Hive 中获取下 n 行