Python 在更新值时扩展numpy数组

Python 在更新值时扩展numpy数组,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我有一个形状为(1,m)的numpy数组,每个条目(n)是一个范围为0-9的整数 我想创建一个新的矩阵,它的形状(m,10),其中所有条目都是0,除了第n列是1 例如: [2, 3, 1] -> [[0, 0, 1, 0, ...], [0, 0, 0, 1, ...], [0, 1, 0, 0, ...]] 我为其编写的代码是: y_values = np.array([[2, 3, 6, 4, 7]]) y = np.zeros((10, y_values.shape[1])) f

我有一个形状为
(1,m)
的numpy数组,每个条目(
n
)是一个范围为0-9的整数

我想创建一个新的矩阵,它的形状
(m,10)
,其中所有条目都是0,除了第n列是1

例如:

[2, 3, 1] -> [[0, 0, 1, 0, ...], [0, 0, 0, 1, ...], [0, 1, 0, 0, ...]]
我为其编写的代码是:

y_values = np.array([[2, 3, 6, 4, 7]])
y = np.zeros((10, y_values.shape[1])) 
for i in range(y_values.shape[1]):
    y[y_values[0][i]][i] = 1

是否有一种方法可以摆脱
for
循环,并使其更有效?

正如您所期望的,有一种方法,使用奇特的索引。您需要提供两个数组,在每个方向上给出相应的坐标。您已经拥有的列索引。与每列对应的行索引正好是
np.arange(m)

另一个解决方案是(如果您确定所有0-9类都将存在)


@罗伊查。不要删除你的答案,它完全可以。我的意思是OP想用10而不是max+1。这能回答你的问题吗@永军。正确的感谢是投票并最终选择答案
result = np.zeros((m, 10), dtype=np.bool)
result[np.arange(m), y_values[0]] = True
df = pd.get_dummies([2, 3, 1, 4]).T