Select query not giving result for inner query values
The problem is that: 

select string_to_array(trim(mt1.id, '[]'), ',')::numeric[]


does not return an array, it returns a set of arrays (even though it's just a single row - it's still a set)

If you are sure that your sub-query always returns a single row, you can simply cast the result of the select to an array:

select mt.val 
from mytable mt 
where mt.id = any ((select string_to_array(trim(mt1.id, '[]'), ',')::numeric[] 
                   from mytable1 mt1 
                   where mt1.id1 = 1003)::numeric[])


You actually don't need the cast twice, so the above can be simplified by removing the inner cast:

select mt.val 
from mytable mt 
where mt.id = any ((select string_to_array(trim(mt1.id, '[]'), ',')
                   from mytable1 mt1 
                   where mt1.id1 = 1003)::numeric[])