Преобразование большой матрицы float64 в матрицу int32 - PullRequest
0 голосов
/ 27 мая 2019

У меня есть большой набор данных, для которого мне нужно вычислить евклидову матрицу расстояний, однако я ограничен в ОЗУ и использую np.float64 (по умолчанию), так как dtype делает ПК нехваткой памяти. Я бы использовал квадратное расстояние, так как оно быстрее и в любом случае возвращает целое число.

Использование .astype (np.int32) не решает проблему, так как он все еще сначала создается как float64.

сам набор данных - int32, но возвращенная матрица - float64

matrix = pairwise_distances(dataset, metric='euclidean', squared=True)
print(matrix.dtype)
float64

Как я могу привести его непосредственно к массиву int?

1 Ответ

0 голосов
/ 27 мая 2019

Итак, проблема в том, что вы хотите повысить эффективность использования ОЗУ своих данных

Вы можете преобразовать матрицу возврата в int32 (учитывая потерю данных) или float32, что лучше в моем примере кода для этого

import numpy as np
arr = np.array([[1.0, 4, 5, 12], 
    [-5.9, 8, 9.7, 0],
    [-6, 7, 11, 19]])
print(arr.dtype) 
arr = arr.astype('float32') 
print(arr.dtype)

вывод был следующим

float64
float32
...