Я заметил различные случаи в Matlab и октаве, где функции принимают как матрицы, так и векторы, но не делают то же самое с векторами, как и с матрицами.Октава и Matlab «wat» матричные/векторные несоответствия
Это может вызывать разочарование, поскольку, когда вы вводите матрицу с переменным числом строк/столбцов, ее можно интерпретировать как вектор и делать то, чего вы не ожидаете, когда высота/ширина составляет 1 для сложной отладки и странные условные краевые случаи.
Я перечислю несколько я нашел, но мне интересно, что другие люди столкнулись с
(Примечание:. Я ищу только в тех случаях, когда код, принимает матрицы в качестве действительного ввода Все, что вызывает исключение, когда не-вектор матрицы дается в качестве аргумента не учитывается)
1) «Diag» может быть использован для обозначения диагонали матрицы или повернуть вектор в диагональную матрицу
поскольку первый, как правило, используется только для квадратных матриц, это не так вопиюще в Matlab, но в Octave это может быть особенно болезненно, когда Октав взаимодействует с ve т х р начало с ненулевым элементом, а все остальные нулей как «диагональная матрица», т.е.
t=eye(3);
size(diag(t(:,3))) == [3,3]
size(diag(t(:,2))) == [3,3]
size(diag(t(:,1))) == [1,1]
2) Индексация в вектор-строки с логическими выражениями она возвращает вектор-строки
индексирование во что-нибудь еще с логическими выражениями возвращаются вектор-столбец
a = 1:3;
b = true(1,3);
size(a(b)) == [1, 3]
a = [a; a];
b = [b; b];
size(a(b)) == [6, 1]
3) Индексирование в вектор V с векторным индексом я возвращает вектор того же (строка/COL) типа, как ст. Но если либо в или я матрица, возвращаемое значение имеет тот же размер, что и i.
a = 1:3;
b = a';
size(a(b)) == [1, 3]
b = [b,b];
size(a(b)) == [3, 2]
4) макс, мин, сумма и т.д. действуют на столбцах матрицы M individiually, если М 1xN в этом случае они не действуют на М как единый вектор-строка
a = 1:3
size(max(a)) == [1, 1]
a = [a;a]
size(max(a)) == [1, 3]
макс особенно плохо, поскольку он не может даже принять измерение в качестве аргумента (в отличие от суммы)
Какие еще такие случаи следует учитывать при написании кода октавы/матлаба?
только для уточнения: вы можете указать размер для max/min: 'min (rand (3), [], 1)' или 'max (rand (3), [], 2)' – Amro