numpy添加给定的行

时间:2018-11-29 07:17:56

标签: 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],添加行{{ 1}},并按列逐行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]] 中添加行013,并且由于m中仅要添加一行,所以结果是

[2]

还有其他更优雅的方式吗?

1 个答案:

答案 0 :(得分: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]])

我不知道这是否可以进一步矢量化。