Tôi đã nhận thấy các trường hợp khác nhau trong Matlab và octave trong đó hàm chấp nhận cả ma trận và vec-tơ, nhưng không thực hiện tương tự với vec-tơ như với ma trận. Điều này có thể gây phiền toái vì khi bạn nhập một ma trận với một số hàng/cột có thể thay đổi, nó có thể được hiểu là vectơ và làm điều gì đó bạn không mong đợi khi chiều cao/chiều rộng là 1 để gỡ lỗi và trường hợp cạnh có điều kiện lạ.Octave và Matlab "wat" ma trận/vector mâu thuẫn
tôi sẽ liệt kê một vài tôi đã tìm thấy, nhưng tôi tò mò những gì người khác người đã chạy vào
(Lưu ý:. Tôi chỉ tìm kiếm cho trường hợp mã chấp nhận ma trận như là đầu vào hợp lệ Bất cứ thứ gì đặt ra một ngoại lệ khi một ma trận phi vector được đưa ra như một cuộc tranh cãi không được tính)
1) "diag" có thể được sử dụng để có nghĩa là đường chéo của một ma trận hoặc bật một vector thành một ma trận đường chéo
Kể từ trước đây thường chỉ được sử dụng cho ma trận vuông này không phải là quá nghiêm trọng trong MATLAB, nhưng trong Octave nó có thể đặc biệt đau đớn khi Octave interperets một ctor đầu với một yếu tố khác không và tất cả những gì số không khác như là một "ma trận đường chéo" tức là
t=eye(3);
size(diag(t(:,3))) == [3,3]
size(diag(t(:,2))) == [3,3]
size(diag(t(:,1))) == [1,1]
2) Indexing vào một hàng-vector với logicals trả về một hàng-vector
Indexing vào bất cứ điều gì khác với logicals lợi nhuận một vector cột
a = 1:3;
b = true(1,3);
size(a(b)) == [1, 3]
a = [a; a];
b = [b; b];
size(a(b)) == [6, 1]
3) Indexing thành một v vector với một véc tơ chỉ số i trả về một vector của cùng (hàng/col) gõ như v. Nhưng nếu một trong hai v hoặc tôi là một ma trận, giá trị trả về có cùng kích thước với tôi.
a = 1:3;
b = a';
size(a(b)) == [1, 3]
b = [b,b];
size(a(b)) == [3, 2]
4) max, min, sum, vv hoạt động trên các cột của một ma trận M individiually trừ khi M là 1xN trong trường hợp mà họ hoạt động trên M như một đơn hàng-vector
a = 1:3
size(max(a)) == [1, 1]
a = [a;a]
size(max(a)) == [1, 3]
max đặc biệt xấu vì nó thậm chí không thể lấy tham số (không giống như tổng)
Tôi nên xem những trường hợp nào khác khi viết mã octave/matlab?
chỉ để làm rõ: bạn có thể chỉ định thứ nguyên cho tối đa/phút: 'phút (rand (3), [], 1)' hoặc 'max (rand (3), [], 2)' – Amro