# Reprojecting unequal number of latitude and longitude: pyproj.exceptions.ProjError: x, y, z, and time must be same size

I have a rectangular matrix of geographic climate data with a 1d row of latitude coordinates (size=834) and a 1d column with longitude coordinates (size=1115). They are both in unit of m (EPSG:32630) and I would like to transform to lat/lon. When I try to do:

``````    from pyproj import Proj, transform

inProj = Proj('epsg:32630')
outProj = Proj('epsg:4326')
x1 = precip.lon.values
x2 = precip.lat.values
x2, y2 = transform(inProj, outProj, precip.lon.values, precip.lat.values)
print (x2, y2)
``````

I get the error:

``````Traceback (most recent call last):
File "<input>", line 4, in <module>
File "<conda_env>/lib/python3.7/site-packages/pyproj/transformer.py", line 759, in transform
File "<conda_env>/lib/python3.7/site-packages/pyproj/transformer.py", line 446, in transform
errcheck=errcheck,
File "pyproj/_transformer.pyx", line 459, in pyproj._transformer._Transformer._transform
pyproj.exceptions.ProjError: x, y, z, and time must be same size
``````

Does anyone know how I can transform from PCS to GCS with Python without having equal amount of latitude and longitude values?

• I guess you need to generate x, y coordinates for each cell of your grid and transform those to get the best result. Alternatively, you can do that for edge cells only and regenerate the matrix from that in another CRS, but keep in mind that you might face issues with the spherical nature of the earth. Jun 18 '20 at 10:08
• You probably want something like rioxarray if you have a grid: corteva.github.io/rioxarray/stable/examples/reproject.html Jun 19 '20 at 22:05

Thanks to the comment from Martin, I did what he suggested first. I guess there is no way to just reproject latitude and longitude seperately and not if they are uneven.

``````    x1 = precip.lon.values
y1 = precip.lat.values
y1 = y1.reshape(-1,1)

#Generate two equal matrices with longitude and latitude.
ones = np.ones((834,1115))
xlon = np.multiply(ones, x1)
ylat = np.multiply(ones, y1)
lat, lon = transform(inProj, outProj, xlon, ylat)
``````

This did solve my problem but I am still confused why it needs to be xlon, ylat, but this worked out and gave the right projection in the end. I tried first transform(inProj, outProj, ylat, xlon) but did not give any correct projection. If somebody knows what is going on I would like to know. I could not find any explanation in the docs.