如何将逗号分隔值放入numpy单元格

时间:2017-06-30 06:18:01

标签: python arrays numpy multidimensional-array rasterio

我的地理参考图像的坐标值如(475224.0,4186282.0)。我的图像尺寸为(647,2188)。即有647列和2180行。我想把坐标值变成一个大小为(647,2180)的numpy数组,这样我就可以得到每个像素的坐标作为一个数组。我编码如下。

rr = rasterio.open(fname) #fname is the georefered image
col = rr.width
row = rr.height
coord = np.empty(shape=(col,row),dtype=rr.dtypes[0])

for i in range(0,col):
    for j in range(0,row):
        coord[i,j] = rr.transform*(i,j)

问题是rr.transform *(i,j)会给出像(475224.0,4186282.0)这样的值。如何将其保存到单元格中。对于上面的程序,我收到如下错误

  

Traceback(最近一次调用最后一次):文件   “/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py”   第2881行,在run_code中       exec(code_obj,self.user_global_ns,self.user_ns)文件“”,第3行,in       coord [i,j] = rr.transform *(i,j)ValueError:用序列设置数组元素。

1 个答案:

答案 0 :(得分:1)

假设您的rr.transform*()输出是有效的Python tuple,我认为您这样做会比以前复杂得多。默认情况下,numpy将在创建和/或分配给np.array:s时处理元组和列表相等。因此,一个更简单的解决方案是添加额外的维度并直接分配您的值:

rr = rasterio.open(fname) #fname is the georefered image
col = rr.width
row = rr.height
coord = np.empty(shape=(col,row,2)

for i in range(0,col):
    for j in range(0,row):
        coord[i,j] = rr.transform*(i,j)

正如您所看到的,唯一的区别是我添加了额外的尺寸以适应rr的大小。在这里,我将第三维硬编码为2。可能会从rr对象中动态地找到它。在一般情况下,我们不限于tuple两个值。