Python Numpy:实现v[np.arange(v.shape[0]),col_index]=1的聪明方法?

Python Numpy:实现v[np.arange(v.shape[0]),col_index]=1的聪明方法?,python,numpy,Python,Numpy,假设我有一个矩阵v: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 我还有一个向量col_index=[0,0,1,2,2,1],它指示我应该为矩阵v的每一行放一个1 在这种情况下,任务的结果应该是: 1 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 以下代码起作用: v[np.arange(v.shape[0]), col_indices] = 1 但我想知道是否有一个聪明的方法来实现这一点,因为在上面的代码中,我必须创建一个向量来索引矩阵

假设我有一个矩阵v:

0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
我还有一个向量col_index=[0,0,1,2,2,1],它指示我应该为矩阵v的每一行放一个1

在这种情况下,任务的结果应该是:

1 0 0
1 0 0
0 1 0
0 0 1
0 0 1
0 1 0
以下代码起作用:

v[np.arange(v.shape[0]), col_indices] = 1
但我想知道是否有一个聪明的方法来实现这一点,因为在上面的代码中,我必须创建一个向量来索引矩阵,这似乎是浪费

我还尝试了以下代码,但它不能满足我的要求:

v[:, col_indices] = 1

这是做索引的切割器方法

看看这些时间安排。生成该数组并不需要很长时间。实际上,索引这些点需要更长的时间

In [208]: x=np.zeros((10000,10000))

In [209]: timeit np.arange(x.shape[0]),np.arange(x.shape[1])
10000 loops, best of 3: 23.5 us per loop

In [210]: timeit x[np.arange(x.shape[0]),np.arange(x.shape[1])]=1
1 loops, best of 3: 1.88 ms per loop
几周前的一个类似问题是


海报想要一些简单的东西,比如[:,感兴趣的条目],而不是[np.arangea.shape[0],感兴趣的条目]。我认为这只是[I,J]对于任何一对匹配索引数组的一个特例

这是切肉刀做索引的方法

看看这些时间安排。生成该数组并不需要很长时间。实际上,索引这些点需要更长的时间

In [208]: x=np.zeros((10000,10000))

In [209]: timeit np.arange(x.shape[0]),np.arange(x.shape[1])
10000 loops, best of 3: 23.5 us per loop

In [210]: timeit x[np.arange(x.shape[0]),np.arange(x.shape[1])]=1
1 loops, best of 3: 1.88 ms per loop
几周前的一个类似问题是

海报想要一些简单的东西,比如[:,感兴趣的条目],而不是[np.arangea.shape[0],感兴趣的条目]。我认为这只是[I,J]对于任何一对匹配索引数组的一个特例