преобразование типа Python по всему массиву NumPy сразу - PullRequest
0 голосов
/ 01 мая 2018

У меня есть пустой список, тип его элемента numpy.float64, и я хотел бы преобразовать все элементы списка в плавающее.

Это распечатка из списка:

[array([ -7.19244777e+24,   3.32768299e-02,  -7.19249216e+24], dtype=float32), 
 array([ -8.87044985e+25,   1.46775544e-01,  -8.87068228e+25], dtype=float32), 
 array([ 0.61927807, -0.16575921,  0.98002648], dtype=float32),
 array([ 0.63426137, -0.15838303,  0.97730571], dtype=float32)]

Я мог бы преобразовать каждый элемент из numpy.float в float с помощью следующего кода.

mtx = []
for i in range(len(centroids)):
    row = []
    for j in range(len(centroids[i])):
        row.append(np.asscalar(centroids[i][j])) 
    mtx.append(row) 

Мне интересно, есть ли какой-нибудь однострочный или служебный метод для преобразования элементов всего списка из numpy.float64 в float?

Тот же вопрос для строковых и других типов данных.

1 Ответ

0 голосов
/ 01 мая 2018

np.ndarray.tolist() делает именно то, что вы хотите.

>>> a = np.identity(3, np.float64)
>>> a
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> a.dtype
dtype('float64')
>>> b = a.tolist()
>>> type(b[0][0])
<class 'float'>

Применительно к вашему списку массивов:

>>> array = np.array
>>> float32 = np.float32
>>> loa = [array([ -7.19244777e+24,   3.32768299e-02,  -7.19249216e+24], dtype=float32), 
...  array([ -8.87044985e+25,   1.46775544e-01,  -8.87068228e+25], dtype=float32), 
...  array([ 0.61927807, -0.16575921,  0.98002648], dtype=float32),
...  array([ 0.63426137, -0.15838303,  0.97730571], dtype=float32)]
>>> 
>>> lol = [a.tolist() for a in loa]
>>> lol
[[-7.192447772100603e+24, 0.03327682986855507, -7.19249215957853e+24], [-8.870449851573768e+25, 0.14677554368972778, -8.870682280549097e+25], [0.619278073310852, -0.16575920581817627, 0.9800264835357666], [0.6342613697052002, -0.15838302671909332, 0.9773057103157043]]
>>> type(lol[0][0])
<class 'float'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...