Try to avoid iterating over numpy arrays if possible. It's faster to work on them directly.
I would suggest splitting values into two arrays:
```python
normals = np.zeros_like(vertices)
counts = np.zeros(vertices.shape[0])
```
and then you can do something similar to this:
```python
normals /= counts.reshape(-1,1)
normals /= np.linalg.norm(normals, axis=1).reshape(-1,1)
return PointAttribute(normals)
```