Unexpected behavior with np.min_scalar_type
import numpy as np np.version.full_version '2.0.0.dev-55472ca' np.min_scalar_type(2**8-1)
np.min_scalar_type(2**16-1)
np.min_scalar_type(2**32-1)
np.min_scalar_type(2**64-1)
np.min_scalar_type(2**63-1)
np.min_scalar_type(2**63)
I was experimenting with np.min_scalar_type to make sure it worked as expected, and found some unexpected results for integers between 2**63 and 2**64-1. I would have expected np.min_scalar_type(2**64-1) to return uint64. Instead, I get object. Further experimenting showed that the largest integer for which np.min_scalar_type will return uint64 is 2**63-1. Is this expected behavior? On python 2.7.2 on a 64-bit linux machine: dtype('uint8') dtype('uint16') dtype('uint32') dtype('O') dtype('uint64') dtype('O') I get the same results on a Windows XP machine running python 2.7.2 and numpy 1.6.1. Kathy
I get the same results as you, Kathy. *surprised* (On OS X (Lion), 64 bit, numpy 2.0.0.dev-55472ca, Python 2.7.2. On 24.01.2012, at 16:29, Kathleen M Tacina wrote:
I was experimenting with np.min_scalar_type to make sure it worked as expected, and found some unexpected results for integers between 2**63 and 2**64-1. I would have expected np.min_scalar_type(2**64-1) to return uint64. Instead, I get object. Further experimenting showed that the largest integer for which np.min_scalar_type will return uint64 is 2**63-1. Is this expected behavior?
import numpy as np np.version.full_version '2.0.0.dev-55472ca' np.min_scalar_type(2**8-1)
np.min_scalar_type(2**16-1)
np.min_scalar_type(2**32-1)
np.min_scalar_type(2**64-1)
np.min_scalar_type(2**63-1)
np.min_scalar_type(2**63)
On python 2.7.2 on a 64-bit linux machine: dtype('uint8') dtype('uint16') dtype('uint32') dtype('O') dtype('uint64') dtype('O')
I get the same results on a Windows XP machine running python 2.7.2 and numpy 1.6.1.
Kathy _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
On Tue, Jan 24, 2012 at 7:29 AM, Kathleen M Tacina < Kathleen.M.Tacina@nasa.gov> wrote:
** I was experimenting with np.min_scalar_type to make sure it worked as expected, and found some unexpected results for integers between 2**63 and 2**64-1. I would have expected np.min_scalar_type(2**64-1) to return uint64. Instead, I get object. Further experimenting showed that the largest integer for which np.min_scalar_type will return uint64 is 2**63-1. Is this expected behavior?
This is a bug in how numpy detects the dtype of python objects. https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/common.... You can see there it's only checking for a signed long long, not accounting for the unsigned case. I created a ticket for you here: http://projects.scipy.org/numpy/ticket/2028 -Mark
import numpy as np np.version.full_version '2.0.0.dev-55472ca' np.min_scalar_type(2**8-1)
np.min_scalar_type(2**16-1)
np.min_scalar_type(2**32-1)
np.min_scalar_type(2**64-1)
np.min_scalar_type(2**63-1)
np.min_scalar_type(2**63)
On python 2.7.2 on a 64-bit linux machine: dtype('uint8') dtype('uint16') dtype('uint32') dtype('O') dtype('uint64') dtype('O')
I get the same results on a Windows XP machine running python 2.7.2 and numpy 1.6.1.
Kathy
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (3)
-
Kathleen M Tacina -
Mark Wiebe -
Samuel John