我正在尝试将numpy数组从一个整数转换为字符串但是我的方法不起作用,我想我的问题也可能有更优雅的方法。
所以我有一个名为“landuse”的整数数组,它是一系列代表不同土地利用类别的数字1-3。这是我目前的方法......(这不是atm)
landuse2 = landuse.astype('S10')
for name in landuse2:
if name == '1.0':
name = 'Forest'
elif name = '2.0'
name = 'Water'
else:
name = 'Urban'
我尝试使用if语句只调用数字1,'1','1.0',1 *没有运气。它运行时没有错误,landuse2被转换为10个字符的字符串(虽然只有'1.0'...写在数组中),但for循环没有更新我的表。
修改
抱歉,我应该更具体地说明我的阵列是如何组织的。 Landuse是一个名为Data的更大数组的一部分,它有10列和10,000行。
我简单地将landuse2定义如下
landuse2 = Data[Landuse]
然后我打算用landuse2替换原来的数据[Landuse]
我认为这会有效但是我首先需要将Landuse float转换为int
Data[Landuse]=np.array([a.setdefault(i,'Urban') for i in Data[Landuse]],dtype='|S10')
但是我试图通过astype将浮动更改为整数
Data[Landuse]= Data[Landuse].astype('int')
答案 0 :(得分:1)
我不完全清楚你的问题是什么,但似乎你可以使用字典:
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')
答案 1 :(得分:1)
首先让我解释为什么你的循环不起作用,在python中赋值,即a = 1
获取对象1
并赋予它名称a
。执行name = "Water"
时,name
会忘记之前指向的内容,现在指向"Water"
,但这并不意味着分配给name
的上一个对象获得了替换为"Water"
。
这就是问题,现在是修复。如果将landuse作为整数代码数组,则可以使用查找表。该表应该足够大,以便在执行lookup_table[landuse.max()]
import numpy as np
landuse = np.array([1,2,3,1,2,4])
lookup_table = np.array(['None', 'Forest', 'Water', 'Urban', 'Other'])
landuse_title = lookup_table[landuse]
对于问题的最后部分,numpy ndarray是一个同质数据结构,这意味着数组中的所有内容必须具有相同的数据类型。考虑到这个限制,应该清楚的是,您不能取一行整数并用一行字符串替换它。 Numpy确实有“灵活的dtypes”,允许你做类似的事情:
>>> 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')
我们创建了一个数组,其中包含每个人的姓名,年龄和身高,但请注意数组的形状是(2,)因为数组中有两个“人”。我不确定你的需求是什么,但你可以尝试使用灵活的dtype将所有信息保存在一个数组中,如果这就是你需要的。根据我的最终目标,我经常发现使用几个单独的数组或数组列表会更容易。希望有所帮助。