code: def getSparseTensor(numNonzeros, inputSize, outputSize,
                      onlyPositive=False,
                      fixedRange=1.0/24):
    
    # Initialize weights in the typical fashion.
    w = torch.Tensor(outputSize, inputSize, )
  
    if onlyPositive:
      w.data.uniform_(0, fixedRange)
    else:
      w.data.uniform_(-fixedRange, fixedRange)
  
    # Zero out weights for sparse weight matrices
    if numNonzeros < inputSize:
      numZeros = inputSize - numNonzeros
  
      outputIndices = np.arange(outputSize)
      inputIndices = np.array([np.random.permutation(inputSize)[:numZeros]
                               for _ in outputIndices], dtype=np.long)
  
      # Create tensor indices for all non-zero weights
      zeroIndices = np.empty((outputSize, numZeros, 2), dtype=np.long)
      zeroIndices[:, :, 0] = outputIndices[:, None]
      zeroIndices[:, :, 1] = inputIndices
      zeroIndices = torch.LongTensor(zeroIndices.reshape(-1, 2))
  
      zeroWts = (zeroIndices[:, 0], zeroIndices[:, 1])
      w.data[zeroWts] = 0.0
  
    return w
docs: Return a random tensor that is initialized like a weight matrix
    Size is outputSize X inputSize, where weightSparsity% of each row is non-zero