Преобразовать массив 1D в вектор строки или столбца в Numpy - PullRequest
2 голосов
/ 25 января 2020

Меня смущают NumPy понятия массива и вектора, скажем, у нас есть 1-D массив, как показано ниже. Из метода «shape» я вижу размерность. (10,) означает 1 измерение с 10 элементами.

a = np.arange(10)
print(a)
a.shape

[0 1 2 3 4 5 6 7 8 9]
(10,)

Теперь я познакомился с методом с именем np.newaxis, чтобы преобразовать массив в вектор-строку. Так что мне интересно в NumPy мы предполагаем, что вектор строки или столбца всегда имеет 2-мерность? (Я думаю, что в линейной алгебре вектор может жить в любом измерении, или существует концептуальная разница в NumPy и линейной алгебре, когда мы говорим о «измерении»?). Так как вектор был преобразован путем добавления 1 измерения, вызвав np.newaxis.

print(a[np.newaxis:])
print(a[np.newaxis,:].shape)

[0 1 2 3 4 5 6 7 8 9]
(1, 10)

Ответы [ 3 ]

1 голос
/ 26 января 2020

Обратите внимание, что слово DIMENSION может иметь разный смысл в разных контекстах. Например, в линейной алгебре (1, 1) - это вектор в 2D-пространстве, а (1, 1, 1) - это вектор в 3D-пространстве, и оба они являются одномерными массивами в языках программирования. Коллекция трехмерных векторов - это матрица в линейной алгебре и двумерный массив в языках программирования.

В терминах формы линейной алгебры (10,) это 1 10-мерный вектор или 10 скалярных значений. Форма (10,2) - это 2 10-мерных вектора или 10 2-мерных векторов.

Рассмотрим формулу умножения матрицы линейной алгебры:

AB(i,j) = sum(A[i,k] * B[k,j])

Эта формула остается в силе для векторов, если мы Предположим, что вектор строки - это матрица измерения (1, N), а вектор столбца - это матрица измерения (N, 1).

NumPy использует тот же подход. Но NumPy допускает не только 2D-массивы, но и 1D, 3D и так далее. Такие массивы полезны для других вычислительных моделей. Если вы заинтересованы в этом, вы можете прочитать больше о тензорах.

Вы можете переставить элементы ndarray методом .reshape(...). При изменении формы массива все элементы остаются на месте, но адресация элементов изменяется.

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

0 голосов
/ 26 января 2020

Просто запустите следующее:

a.reshape(-1,1)
0 голосов
/ 26 января 2020

Если вы хотите изменить форму массива, вы должны использовать:

new_array = np.reshape(old_array, (-1, 2))

, где -1 - размер нового массива от размера данного массива.

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