python - Numpy添加给定的行
问题描述
例如,给定一个 numpy 数组
A = np.ones(shape=(7, 6), dtype=np.float32)
和一份清单
v = [[0, 2], [1, 4], [3, 5, 6]]
我想要做的是在A
给定的每个项目中添加行v
,对于v
,有3个项目,对于v[0]
,逐列添加行0
和行2
。输出的形状是(3, 6)
,输出是
res = array([[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3.]])
# res[0] = A[0] + A[2]
# res[1] = A[1] + A[4]
# res[2] = A[3] + A[5] + A[6]
这是一个更清楚的例子,给出一个矩阵
m = [[1, 2, 3],
[2, 3, 4],
[1, 1, 1],
[2, 2, 2],
[1, 1, 1]]
和要添加的行
v = [[0, 1, 3], [2]]
所以,这里在矩阵中添加行0
、、1
和,因为只有一行要添加,所以结果是3
m
[2]
# res.shape = (2, 3)
res[0] = m[0] + m[1] + m[3]
res[1] = m[2]
有没有更优雅的方式来做到这一点?
解决方案
您可以使用精美的索引从数组中选择行。
对于A
:
>>> A = np.ones(shape=(7, 6), dtype=np.float32)
>>> v = [[0, 2], [1, 4], [3, 5, 6]]
>>> np.array([A[rows].sum(axis=0) for rows in v])
array([[2., 2., 2., 2., 2., 2.],
[2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3.]], dtype=float32)
对于m
:
>>> m = np.array([[1, 2, 3], [2, 3, 4], [1, 1, 1], [2, 2, 2], [1, 1, 1]])
>>> v = [[0, 1, 3], [2]]
>>> np.array([m[rows].sum(axis=0) for rows in v])
array([[5, 7, 9],
[1, 1, 1]])
我不知道这是否可以进一步矢量化。
推荐阅读
- python - 解析自定义配置文件
- node.js - 创建源插件时无法在 gatsby graphql 层中保存数据
- excel - 如何将 OR 函数嵌入到 IF(LEFT(CELL())) 函数中?
- c# - 如何仅使用 AWS Lambda .Net Core 将图像文件从 SQL Server varbinary(max) 迁移到 S3 .jpg 或 .bmp
- laravel - 使用 DataTable 上的导出按钮
- python - PyCharm 中的 Git Hooks 在不正确的环境中运行
- java - “文件不包含类 api.configuration”是什么意思?
- python - 如何在 python 中使用 pyarrow 连接到 hdfs
- flutter - 在颤动的容器底部添加阴影?
- php-extension - 有没有推荐的方法通过 getter 返回属性值?