【问题标题】:How to put a comma separated value to a numpy cell如何将逗号分隔值放入 numpy 单元格
【发布时间】:2017-12-04 00:30:54
【问题描述】:

我有地理参考图像,其坐标值如 (475224.0, 4186282.0)。我的图像尺寸为 (647, 2180)。即有 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 行,在 coord[i,j] = rr.transform*(i,j) ValueError: setting an array element with a sequence.

【问题讨论】:

  • “逗号分隔值”是什么意思?是tuple吗?

标签: python arrays numpy multidimensional-array rasterio


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多