2016-04-01 4 views
2

Я немного запутался в выборе столбца массива NumPy, потому что результат отличается от Matlab и даже от матрицы NumPy. См. Следующие случаи.Выбор столбца массива numpy

В Matlab мы используем следующую команду для выбора вектора столбца из матрицы.

x = [0, 1; 2 3] 
out = x(:, 1) 

Затем из становится [0; 2], который представляет собой вектор-столбец.

Чтобы сделать то же самое с NumPy Matrix

x = np.matrix([[0, 1], [2, 3]]) 
out = x[:, 0] 

Тогда выход np.matrix([[0], [2]]), который, как ожидается, и это вектор-столбец.

Однако в случае NumPy массива

x = np.array([[0, 1], [2, 3]]) 
out = x[:, 0] 

Выход np.array([0, 2]) который является 1 мерная, так что это не вектор-столбец. Я ожидаю, что это должно было быть np.array([[0], [2]]). У меня есть два вопроса.

1.Почему вывод из массива NumPy отличается от случая матрицы NumPy? Это вызывает много путаницы для меня, но я думаю, что для этого может быть какая-то причина.

2.Чтобы получить вектор-столбец из 2-Dim NumPy массив, то я должен делать дополнительные вещи, как expand_dims

x = np.array([[0, 1], [2, 3]]) 
    out = np.expand_dims(x[:, 0], axis = 1) 
+2

Из-за того, как работает вещание, вам не важно, является ли одномерный вектор строкой или столбцом. Просто используйте его, как вам нравится. –

ответ

3

В MATLAB все имеет по крайней мере 2-х измерениях. В старших MATLABs, 2d было, теперь у них может быть больше. np.matrix смоделирован на этом старом MATLAB.

Что делает MATLAB при индексировании 3d-матрицы?

np.array более общий. Он может иметь размеры 0, 1, 2 или более.

x[:, 0] 
x[0, :] 

оба выбирают один столбец или строку и возвращают массив с одним меньшим размером.

x[:, [0]] 
x[[0], :] 

вернет 2d массивы с однотонным размером.

В Octave (MATLAB клон) индексация приводит к противоречивым результатам, в зависимости от того, с какой стороны матрицы я выбираю:

octave:7> x=ones(2,3,4); 
octave:8> size(x) 
ans = 
    2 3 4 

octave:9> size(x(1,:,:)) 
ans = 
    1 3 4 

octave:10> size(x(:,:,1)) 
ans =  
    2 3 

MATLAB/Octave добавляет размеры в конце, и, видимо, легко выжимает их на той стороне, Что ж.

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

Тот факт, что numpy может иметь любое количество измерений, в то время как MATLAB имеет как минимум 2, является решающим отличием, которое часто обходит пользователей MATLAB. Но один не логичен, чем другой. Практика MATLAB более важна для истории, чем общие принципы.

Смежные вопросы