Правильный способ хранения образцов в массивах NumPy - PullRequest
0 голосов
/ 26 апреля 2018

Предположим, у вас есть матрица (двумерный массив NumPy), в котором хранятся многомерные данные выборки. Правильно ли (по скорости и простоте использования) хранить данные, используя одну строку для каждого образца или один столбец для каждого? * Например 1005 *

array([[x1, y1, ...], [x2, y2, ...], ..., [xN, yN, ...]])

или

array([[x1, x2, ..., xN], [y1, y2, ..., yN], ...])

В MATLAB и Octave, безусловно, проще обрабатывать каждый образец как вектор column , но numpy не дает никаких указаний в любом случае.

Например. Вот как вы можете нормализовать набор сэмплов, если каждый хранится как вектор строки:

X - mean(X, axis = 0)

Но если вы храните их как векторы столбцов, вы должны написать

(X.T - mean(X, axis = 1)).T

Что совсем не так удобно.

1 Ответ

0 голосов
/ 26 апреля 2018

Производительность зависит как от схемы доступа, так и от структуры памяти массива. Последний может быть установлен с параметром order, равным np.array(), который:

Укажите структуру памяти массива. Если объект не является массивом, вновь созданный массив будет иметь порядок C (мажор строки), если не указано «F», в этом случае он будет в порядке Fortran (мажор столбца).

(Если объект является массивом, существуют дополнительные параметры, поскольку макет может быть сохранен.)

Также правильный подход может зависеть от библиотек, от которых вы зависите. Например, для линейной регрессии в sklearn ожидается, что для каждой выборки будет по одной строке.

[EDIT]

Хранение образцов в строках также совместимо с pandas.DataFrame объектами:

>>> CIRCLES = np.array([[1, 3.14],
...                     [2, 12.56],
...                     [3, 28.26]])
>>> DF = DataFrame(CIRCLES, columns=['r', 'S'])
>>> DF.mean()
r     2.000000
S    14.653333
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...