i[:5.5]
keine offensichtliche Bedeutung haben.
i[:5]
bedeutet die ersten 5 Elemente des Arrays (oder der Liste). i[:6]
die erste 6. Was soll es mit der 5.5
tun? floor(5.5)
? Decke? 5 und halbe Elemente zurückgeben? 5 Elemente plus eine lineare Interpolation zwischen dem 5. und 6.?
Eigentlich :5.5
Werke (in 1.11), aber mit einer Warnung:
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])
Mit Ihrer strukturierten Array arbeitet Rekord Indizierung auf die gleiche Weise:
In [349]: i = np.array([(5.,1), (6.,2)], dtype=[('foo', 'f4'),('bar', 'i4')])
In [350]: i[:5]
Es ist okay, über das Ende zu schneiden - es gibt einfach alles zurück.
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')])
================
Indizierung in numpy
ist nur eine Möglichkeit des Zählens. Es gibt keine Indexierungs- oder Beschriftungsliste oder ein Array. Das ist etwas, das pandas
hinzugefügt hat, aber es ist kein Teil von numpy
. In Ihrem i
Array haben Felder Namen, z. i['foo']
. Es kann wie eine Spaltenbeschriftung aussehen, aber es ist gefährlich, strukturierte Felder mit 2D-Spalten zu verwechseln.
Sie wollen float * slicing * es scheint. –