In a single neuron output layer should the output be a scalar?
Look, your code says your network has many outputs.
Look at the two lines below. This two lines says the output depends on the dimension of np.dot(w, inputs). In your case it's 4 diminutional vector. And in the last line you are assigning them as output. You can write self.output = sigmoid(np.dot(new_weihts, inputs)) instead of self.output = inputs. Must ensure that new_weights is a vector and has same shape as previous layer's output.

inputs = sigmoid(np.dot(w, inputs) + b)
self.output = inputs


Note: Your network don't look like a 4 layers network. It looks like a one layer network with 4 unit of neutrons.