基于查找表将整数Numpy转换为字符串
我有一个名为“土地利用”的numpy数组,它是一系列数字1-3,代表不同的土地利用类别。我想根据查找表将其转换为字符串基于查找表将整数Numpy转换为字符串,numpy,Numpy,我有一个名为“土地利用”的numpy数组,它是一系列数字1-3,代表不同的土地利用类别。我想根据查找表将其转换为字符串 ids = [0,1,2,3] lookup_table = ['None', 'Forest', 'Water', 'Urban'] 我不完全清楚你的问题是什么,但似乎你可以用字典来解释: import numpy as np landuse=np.array([1,2,3,1,2,4],dtype=np.integer) a={1:'Forest',2:'Water'}
ids = [0,1,2,3]
lookup_table = ['None', 'Forest', 'Water', 'Urban']
我不完全清楚你的问题是什么,但似乎你可以用字典来解释:
import numpy as np
landuse=np.array([1,2,3,1,2,4],dtype=np.integer)
a={1:'Forest',2:'Water'}
print [a.setdefault(i,'Urban') for i in landuse]
它将发出一个包含您感兴趣的字符串的列表:
['Forest', 'Water', 'Urban', 'Forest', 'Water', 'Urban']
如果您的目标是在字符串的numpy数组中获得最终结果,则可以执行以下操作:
name=np.array([a.setdefault(i,'Urban') for i in landuse],dtype='|S10')
首先,让我解释一下为什么循环不起作用,在python中,赋值(即
a=1
获取对象1
并将其命名为a
)。当您执行name=“Water”
操作时,name
会忘记它以前指向的对象,而现在指向的是“Water”
,但这并不意味着以前分配给name
的对象会被替换为“Water”
这就是问题所在,现在需要解决。如果将土地使用作为整数代码数组,则只需使用查找表即可。表格应该足够大,以便在执行查找表格[landuse.max()]时不会出现索引错误。
对于问题的最后一部分,numpy ndarray是一个同质数据结构,这意味着数组中的所有内容都必须具有相同的数据类型。考虑到这一限制,应该清楚的是,您不能将一行整数替换为一行字符串。Numpy确实有“灵活的数据类型”,允许您执行以下操作:
>>> dt = np.dtype([('name', 'S4'), ('age', 'int'), ('height', 'float')])
>>> array = np.array([('Mark', 25, 70.5),('Ben',40,72.75)], dtype=dt)
>>> array
array([('Mark', 25, 70.5), ('Ben', 40, 72.75)],
dtype=[('name', '|S4'), ('age', '<i4'), ('height', '<f8')])
>>> array.shape
(2,)
>>> array['name']
array(['Mark', 'Ben'],
dtype='|S4')
dt=np.dtype([('name','S4'),('age','int'),('height','float'))
>>>数组=np.数组([('Mark',25,70.5),('Ben',40,72.75)],dtype=dt)
>>>排列
数组([('Mark',2570.5),('Ben',4072.75)],
dtype=[('name','S4'),('age','我很确定您想要
a.get(I,'Urban'))
,而不是a.setdefault
,如果a
中找不到i
,它会修改a
。@Bago:我把它作为一个功能,而不是一个bug,因为我不清楚它的确切意图。我认为拥有一个包含输入中所有键及其映射的字典可能有用。我明白了,我想我会把它点出来,以防OP或其他读者不知道区别。
>>> dt = np.dtype([('name', 'S4'), ('age', 'int'), ('height', 'float')])
>>> array = np.array([('Mark', 25, 70.5),('Ben',40,72.75)], dtype=dt)
>>> array
array([('Mark', 25, 70.5), ('Ben', 40, 72.75)],
dtype=[('name', '|S4'), ('age', '<i4'), ('height', '<f8')])
>>> array.shape
(2,)
>>> array['name']
array(['Mark', 'Ben'],
dtype='|S4')