因为数组外面有一对单引号。处理数据时,我总是报告错误,我想将其转换为另一种类型。
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')
>>>
我该怎么办?谢谢
这是电影推荐系统项目中的一个问题。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')
答案 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]