gpt4 book ai didi

python - Numpy 添加给定的行

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:02 27 4
gpt4 key购买 nike

例如给定一个 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 行。输出的shape为(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]]

因此,在矩阵 m 中添加行 013,因为只有在[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 - Numpy 添加给定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53533695/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com