使用for循环实现简单。例如:
scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> l.take(1)
res4: List[Int] = List(1)
scala> l take 1
res5: List[Int] = List(1)
scala> (l)take 1
res6: List[Int] = List(1)
scala> l.take(2)take(1)
res7: List[Int] = List(1)
我想做的是在没有for循环的情况下更新矩阵。像
这样的东西s = np.zeros((3,3))
b = np.array(([0,1],[0,1],[2,0]))
for line in range(s.shape[0]):
s[line][b[line]] = 1
但是s [b] .shape返回一个(3,2,3)矩阵。 有没有办法解决这个问题,或者我必须为每一行做一个for循环?
答案 0 :(得分:0)
s[np.arange(s.shape[0])[..., None], b] = 1
我们在这里使用一些棘手的高级索引。 np.arange(s.shape[0])[..., None]
生成列向量
array([[0],
[1],
[2]])
针对b
进行广播,为s
的每一行选择由b
行的元素给出的列索引。