0

I want to assign zero to a 2d numpy matrix where for each row we have a cutoff column after which should be set to zero.

For example here we have matrix A of size 4x5 with cutoff columns [1,3,2,4]. What I want to do:

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

I could do it with np.repeat ing row indices and columns, but my matrix is so big I can't do that. Is there an efficient way to do this?

Ash
  • 3,428
  • 1
  • 34
  • 44

1 Answers1

0

Use broadcasting to create the full mask and assign -

A[cutoff[:,None] <= np.arange(A.shape[1])] = 0

Alternatively with builtin outer method -

A[np.less_equal.outer(cutoff, range(A.shape[1]))] = 0
Divakar
  • 218,885
  • 19
  • 262
  • 358