Numpy整数字符串

我想将一个numpy数组从一个整数转换为字符串,但是我的方法不工作,我想这可能也有一个更优雅的方法来解决我的问题。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代替原来的数据[土地利用]

我认为这会工作,但是我首先需要将土地利用转换浮动到一个int

Data[Landuse]=np.array([a.setdefault(i,'Urban') for i in Data[Landuse]],dtype='|S10') 

但是我试图改变这种状况浮筒由astype整数一直无果

Data[Landuse]= Data[Landuse].astype('int') 

回答:

首先,让我解释为什么你的循环不工作,在Python中的任务,即a = 1采取对象1,并给它起名a。当您完成name = "Water"时,name忘记了之前指向的内容,现在指向"Water",但这并不意味着将分配给name的上一个对象替换为"Water"

这就是问题所在,现在需要解决。如果你的土地用途是一个整数代码数组,你可以使用一个查找表。该表应足够大,这样你就不会得到一个索引错误,当你做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来将所有信息保存在一个数组中,如果这是你需要的。根据我的最终目标,我经常发现使用几个单独的数组或一组数组更容易。希望有所帮助。

回答:

我不是完全清楚你的问题是什么,但似乎你可以使用字典这样的:

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') 

以上是 Numpy整数字符串 的全部内容, 来源链接: utcz.com/qa/259021.html

回到顶部