【发布时间】:2021-02-07 02:30:25
【问题描述】:
a = np.array([2,3,1,4])
b = np.array([2,3,7,1])
c = np.zeros((4, 10))
我想将值 1 分配给 c 中的某些元素。 a 和 b 定义了这些元素的位置。 a 是每行中值 1 的起始列索引。而b 表示一行中有多少个连续的1。我期待的输出是:
array([[ 0., 0., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0., 0.],
[ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]])
我可以使用如下简单的 for 循环:
for i in range(c.shape[0]):
for k in range(a[i], a[i]+b[i]):
c[i,k]=1
但是对于大型数组来说会很慢,有没有更快的 numpy 索引来做到这一点?谢谢。
【问题讨论】:
-
c[i, a[i]:a[i]+b[i]] = 1应该可以代替k循环工作。 -
是的,我主要关心的是最外层的 for 循环。
-
如果不先处理内部循环,就无法处理外部循环。
-
c 在您的实际用例中的典型形状是什么?
标签: python numpy numpy-ndarray numpy-slicing