If you had to use *np.trace*, I think that indicates there is something wrong in your code. For starters, if you are using a dot product to compute the cost, the result should be 1 x 1, not n x n for some value of n > 1, right? And if you compute the cost using the dot product correctly, no sum is required. The point of using the dot product is that it combines both operations (product and sum) into one operation.

We’re not supposed to write the code for you, so let’s talk about some general examples. Suppose I have a vector v that is 1 x 4 and I want to compute the sum of the squares of the elements of v. I can think of several ways to do that using numpy functions. Try running the following and watch what happens:

```
v = np.array([[1, 2, 3, 4]])
print(v.shape)
print(np.sum(v * v))
print(np.sum(v ** 2))
print(np.sum(np.power(v, 2)))
print(np.dot(v, v.T))
print(np.dot(v.T, v))
print(np.sum(np.dot(v.T,v)))
print(np.trace(np.dot(v.T,v)))
```

Here’s what that generates:

```
(1, 4)
30
30
30
[[30]]
[[ 1 2 3 4]
[ 2 4 6 8]
[ 3 6 9 12]
[ 4 8 12 16]]
100
30
```

So you can get the right answer using *np.trace*, but only because you are compensating for a previous error.