On Thu, May 27, 2010 at 10:25 AM, Bruce Southey <bsouthey@gmail.com> wrote:
On 05/27/2010 10:40 AM, Vincent Davis wrote:
Can you give an example of what you are trying to do?

arr = np.array([(1,'a'),(2,'b')], dtype =[(num,int),(str, |s2)]

No supposed I want to know if I can sum the values in 'num'. I could just try and then handle the exemption, but I would like to do something more like

for col in arr.dtypes.names:
    if arr[col] "is a number":

I think i can use Roberts suggestion, I was not aware of np.number, I guess I need to look into the hierarchy more.

The dtypes have a hierarchy.

In [2]: np.issubdtype(float, np.number)
Out[2]: True

In [3]: np.issubdtype(str, np.number)
Out[3]: False

Robert Kern


If some of your string arrays only have string representations of numbers that you want to do the math on then you have to attempt to convert those arrays into a numeric dtype (probably float) using for example asarray().


>>> import numpy as np
>>> a=np.array([1,2,3])
>>> c=np.array(['1','2','3'])
>>> d=np.array(['a','b','1'])
>>> np.asarray(a, dtype=float)
array([ 1.,  2.,  3.])
>>> np.asarray(c,dtype=float)
array([ 1.,  2.,  3.])
>>> np.asarray(d,dtype=float)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/site-packages/numpy/core/numeric.py", line 284, in asarray
    return array(a, dtype, copy=False, order=order)
ValueError: invalid literal for float(): a
>>> try:
...     np.asarray(d,dtype=float)
... except:
...     print 'fail'

NumPy-Discussion mailing list

Vincent Davis