有效地将零分配给二维 numpy 数组中每行中的多列
Assign zero to multiple columns in each row in a 2D numpy array efficiently
我想将零分配给 2d numpy 矩阵,其中每一行都有一个截止列,之后应设置为零。
例如,这里我们有大小为 4x5 的矩阵 A,截止列为 [1,3,2,4]。
我想做什么:
import numpy as np
np.random.seed(1)
A = np.random.rand(4, 5)
cutoff = np.array([1,3,2,4])
A[0, cutoff[0]:] = 0
A[1, cutoff[1]:] = 0
A[2, cutoff[2]:] = 0
A[3, cutoff[3]:] = 0
我可以用 np.repeat ing 行索引和列来做到这一点,但我的矩阵太大了,我不能那样做。有没有有效的方法来做到这一点?
使用broadcasting
创建完整掩码并赋值-
A[cutoff[:,None] <= np.arange(A.shape[1])] = 0
或者使用 builtin
外部方法 -
A[np.less_equal.outer(cutoff, range(A.shape[1]))] = 0
我想将零分配给 2d numpy 矩阵,其中每一行都有一个截止列,之后应设置为零。
例如,这里我们有大小为 4x5 的矩阵 A,截止列为 [1,3,2,4]。 我想做什么:
import numpy as np
np.random.seed(1)
A = np.random.rand(4, 5)
cutoff = np.array([1,3,2,4])
A[0, cutoff[0]:] = 0
A[1, cutoff[1]:] = 0
A[2, cutoff[2]:] = 0
A[3, cutoff[3]:] = 0
我可以用 np.repeat ing 行索引和列来做到这一点,但我的矩阵太大了,我不能那样做。有没有有效的方法来做到这一点?
使用broadcasting
创建完整掩码并赋值-
A[cutoff[:,None] <= np.arange(A.shape[1])] = 0
或者使用 builtin
外部方法 -
A[np.less_equal.outer(cutoff, range(A.shape[1]))] = 0