首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点数的结构化数组和浮点数组的int

浮点数的结构化数组和浮点数组的int
EN

Stack Overflow用户
提问于 2014-03-08 02:58:04
回答 2查看 121关注 0票数 2

我正在导入csv文件

代码语言:javascript
复制
data = np.genfromtxt('na.csv', delimiter=",", dtype=[('latitude', 'f8'), ('longitude', 'f8'), ('location_id','i4'), ('location_name', 'S60'), ('location_group_id', 'i4'), ('location_group_name', 'S32')])

并考虑location_group_ids的行,一个接一个。

代码语言:javascript
复制
l_g_id_set = set()
l_g_id_set.update(data['location_group_id'])

for lgid in l_g_id_set:
    # rows with location group id == lgid
    group = data[data['location_group_id']==lgid]

到目前为止,我只包含了纬度和经度,这是csv文件中结构化数组的第0位和第1位的两个浮点值。

代码语言:javascript
复制
    # structured array of latitude-longitude
    latlon = group[list(group.dtype.names[:2])]

    # convert the structured array into numpy array of floats
    llarray = latlon.view((float, len(latlon.dtype.names)))

现在,我想将数组第二个位置的整数值location_id包含到latlonllarray中。为了便于计算,我希望llarray是一个有3列的2D浮点数组,而不是让它成为另一个结构化数组。

但是,当我尝试执行以下操作时,仅将2更改为3

代码语言:javascript
复制
    # structured array of latitude-longitude
    latlon = group[list(group.dtype.names[:3])]

    # convert the structured array into numpy array of floats
    llarray = latlon.view((float, len(latlon.dtype.names)))

它失败了,抛出以下错误。

代码语言:javascript
复制
    llarray = latlon.view((float, len(latlon.dtype.names)))
ValueError: new type not compatible with array.

我如何解决这个问题,为什么我的修复失败了?

EN

回答 2

Stack Overflow用户

发布于 2014-03-08 05:49:26

这种转换是可行的

代码语言:javascript
复制
dtype1=[('latitude', 'f8'), ('longitude', 'f8'), ('location_id', 'f4')]
data1=data[list(data.dtype.names[:3])].astype(dtype1)

但是data1.view(float)仍然会给出错误

代码语言:javascript
复制
dtype2=[('latitude', 'f8'), ('longitude', 'f8'), ('location_id', 'f8')]
data2=data[list(data.dtype.names[:3])].astype(dtype2)
data2.view(float).reshape(-1,3)
data2.view((float,3))   # equivalent view

没问题。

示例数据:

代码语言:javascript
复制
In [211]: data[:3]
Out[211]: 
array([(1.2, 2.3, 100, 'testing', 45, 'another'),
       (1.2, 2.3, 200, 'testings', 45, 'xxx'),
       (1.2, 2.3343, 300, 'testings', 45, 'xxx')], 
      dtype=[('latitude', '<f8'), ('longitude', '<f8'), ('location_id', '<i4'), ('location_name', 'S60'), ('location_group_id', '<i4'), ('location_group_name', 'S32')])

In [212]: data2[:3].view(np.float).reshape(-1,3)
Out[212]: 
array([[   1.2   ,    2.3   ,  100.    ],
       [   1.2   ,    2.3   ,  200.    ],
       [   1.2   ,    2.3343,  300.    ]])

In [230]: data2.view(np.float).reshape(-1,3).max(axis=0)
Out[230]: array([   1.2   ,    2.3343,  300.    ])
In [234]: data2['longitude'].max()
Out[234]: 2.3342999999999998
In [236]: data2.view(np.float).reshape(-1,3)[:,1].max()
Out[236]: 2.3342999999999998
票数 1
EN

Stack Overflow用户

发布于 2014-03-08 03:37:30

嗯。也许你会在这方面走运。

代码语言:javascript
复制
f_latlon = latlon.astype(np.float)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22258454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档