我该如何转换为我想成为float64类型的数组类型

时间:2019-01-16 13:50:47

标签: python-3.x numpy

因为数组外面有一对单引号。处理数据时,我总是报告错误,我想将其转换为另一种类型。

arr.dtype ='float64',这不起作用

>>> import numpy as np
>>> arr = np.array('[1,2,3,4]')
>>> arr
array('[1,2,3,4]', dtype='<U9')
>>> arr.shape
()
>>> arr.size
1
>>> print(arr[0])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> arr.dtype
dtype('<U9')

# I want to convert it to the following type
>>> arr1 = np.array([1,2,3,4])
>>> arr1
array([1, 2, 3, 4])
>>> arr1.shape
(4,)
>>> arr1.size
4
>>> arr.dtype
dtype('<U9')
>>> 

我该怎么办?谢谢

P.S。

这是电影推荐系统项目中的一个问题。U_vec是有问题的数组。

    print(userprofile.array)
    u_vec = np.array(userprofile.array)
    print('uu:',u_vec)
    Umatrix = cache.get('umatrix')
    print(Umatrix.shape,'--',u_vec.dtype)
    movieslist = cache.get('titles')

2 个答案:

答案 0 :(得分:0)

'[1,2,3,4]'是一个字符串,但是[1,2,3,4]是一个列表。在第一个示例中,您将根据一个字符串创建一个numpy数组,而numpy无法处理该字符串。但是它可以处理后者。

如果您真的没有选择不使用字符串以外的任何东西,并且确定该字符串将是语法正确的python列表,则可以使用exec方法来创建一个numpy数组出来了:

>>> import numpy as np
>>> exec('arr = np.array({})'.format('[1,2,3,4]'))
>>> arr
array([1, 2, 3, 4])
>>> arr.shape
(4,)
>>> arr.size
4
>>> print(arr[0])
1
>>> arr.dtype
dtype('int64')

由于该字符串包含整数而不是浮点数,因此numpy将创建一个dtype为int64的数组,但是如果要在float64中使用它,则可以执行以下操作来创建该数组:< / p>

>>> import numpy as np
>>> exec('arr = np.array({}).astype(np.float64)'.format('[1,2,3,4]'))
>>> arr
array([1., 2., 3., 4.])
>>> arr.dtype
dtype('float64')

这将创建一个类型为float64的数组。

答案 1 :(得分:0)

    >>> import ast
    >>> import numpy as np
    >>> arr9 = '[1,2,3,4]'
    >>> arr9 = ast.literal_eval(strArr)
    >>> arr9
    [1, 2, 3, 4]
    >>> type(arr9)
    <class 'list'>
    >>> arr = np.array(arr9,float64)
    >>> arr
    [1,2,3,4]