为具有指定列的每一行分配值到numpy数组

Pau*_*ger 5 python arrays numpy

我有一个foo包含n行和m列的矩阵。例:

>>> import numpy as np
>>> foo = np.arange(6).reshape(3, 2) # n=3 and m=2 in our example
>>> print(foo)
array([[0, 1],
       [2, 3],
       [4, 5]])
Run Code Online (Sandbox Code Playgroud)

我有一个数组barn元素。例:

>>> bar = np.array([9, 8, 7])
Run Code Online (Sandbox Code Playgroud)

我有一个包含列索引ind的长度列表n。例:

>>> ind = np.array([0, 0, 1], dtype='i')
Run Code Online (Sandbox Code Playgroud)

我想使用列索引ind来将值赋给bar矩阵foo。我想每行执行一次。假设执行此操作的函数称为assign_function,我的输出将如下所示:

>>> assign_function(ind, bar, foo)
>>> print(foo)
array([[9, 1],
       [8, 3],
       [4, 7]])
Run Code Online (Sandbox Code Playgroud)

有pythonic的方法可以做到这一点吗?

cs9*_*s95 5

由于ind处理第一个轴,您只需要第零轴的分度器。你可以很简单地做到这一点np.arange

foo[np.arange(len(foo)), ind] = bar
foo

array([[9, 1],
       [8, 3],
       [4, 7]])
Run Code Online (Sandbox Code Playgroud)