Как преобразовать этот тип массива, который я хочу быть типом float64 - PullRequest
0 голосов
/ 16 января 2019

Потому что есть пара одинарных кавычек вне массива. Я всегда сообщаю об ошибках при обработке данных и хочу преобразовать их в другой тип.

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')

Ответы [ 2 ]

0 голосов
/ 17 января 2019
    >>> 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]
0 голосов
/ 16 января 2019

'[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, вы можете сделать следующее для создания массива:

>>> 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...