2017-01-04 142 views
0

我想制作一个浮点数组,它将一个浮点数作为索引(例如,如果Pandas系列具有浮点类型索引)。所以让我解释一下。我想要类似于:浮动索引器到numpy数组

i = np.array([(5.,1), (6.,2)], dtype=[('foo', 'f4'),('bar', 'i4')]) 

如果第一个类型('foo'类型)可以用作索引器。所以,我可以做

print(i[:5.5]) 

,它会打印1,或(5., 1)

我很确定这可能与Numpy,我只是不知道如何。

+0

你想浮动*切片*看起来。 –

回答

2

您可能需要逻辑索引:

i[i['foo'] < 5.5] 

# array([(5.0, 1)], 
#  dtype=[('foo', '<f4'), ('bar', '<i4')]) 
0

i[:5.5]不具有明显的意义。

i[:5]表示数组(或列表)的前5个元素。 i[:6]第6个。它应该怎么处理5.5floor(5.5)?天花板?返回5个半元素? 5个元素加上5和6之间的线性插值?

其实:5.5工程(1.11),但有一个警告:

In [346]: np.arange(10)[:5] 
Out[346]: array([0, 1, 2, 3, 4]) 
In [347]: np.arange(10)[:5.5] 
/usr/local/bin/ipython3:1: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future 
    #!/usr/bin/python3 
Out[347]: array([0, 1, 2, 3, 4]) 

有了您的结构数组,记录索引的工作方式相同:

In [349]: i = np.array([(5.,1), (6.,2)], dtype=[('foo', 'f4'),('bar', 'i4')]) 
In [350]: i[:5] 

这是确定切片超越结束 - 它只是返回一切。

Out[350]: 
array([(5.0, 1), (6.0, 2)], 
     dtype=[('foo', '<f4'), ('bar', '<i4')]) 
In [351]: i[:5.5] 
/usr/local/bin/ipython3:1: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future 
    #!/usr/bin/python3 
Out[351]: 
array([(5.0, 1), (6.0, 2)], 
     dtype=[('foo', '<f4'), ('bar', '<i4')]) 

================

索引中numpy只是计数的方式。没有索引或标签列表或数组。这是pandas已添加的内容,但它不是numpy的一部分。在您的i数组中,字段确实有名称,例如i['foo']。它看起来像列标签,但将结构化字段与2d列混淆是危险的。