The functions in math are usually expecting a single number as argument; whereas the functions in numpy are usually expecting anything from a single number to a multidimensional array, and will apply the mathematical function to every element in the array.
For instance:
>>> import math
>>> import numpy as np
>>> math.sqrt(4)
2.0
>>> math.sqrt(25)
5.0
>>> np.sqrt(4)
2.0
>>> np.sqrt(25)
5.0
>>> np.sqrt([4,25])
array([2., 5.])
>>> math.sqrt([4,25])
TypeError: must be real number, not list
>>> math.sqrt(np.array([4,25]))
TypeError: only size-1 arrays can be converted to Python scalars
As it turns out, numpy arrays that contain a single number are able to implicitly convert themselves to a single number without array, when needed, so this works:
>>> math.sqrt(np.array([[25]]))
5.0
The error message you got was telling you "the array y contains more than one number, so it can't be converted to a single number, so you can't call math.sin on it."
If you want to apply a function from math to every element in a list, you can do it using a list comprehension or using builtin function map. However, note that the whole point of numpy is to perform computations very fast on large arrays, and using list comprehensions or map will defeat that purpose.
>>> list(map(math.sqrt, [4, 25]))
[2.0, 5.0]
>>> [math.sqrt(x) for x in [4,25]]
[2.0, 5.0]