2014-08-29 18 views
5

Matlab có các chức năng sau đây để kiểm tra đầu vào:Tại sao isscalar, isvector và ismatrix đều đúng đối với A = 1?

  • isscalar để xác định liệu đầu vào là vô hướng
  • isvector để xác định liệu đầu vào là một vector
  • ismatrix để xác định liệu đầu vào là một ma trận

Đối với A = 1 (hoặc bất kỳ đầu vào "vô hướng" nào) tất cả của lợi tức trên true.
Tại sao tôi thấy hành vi phản trực giác này?
Và làm cách nào để tôi nhận diện A = 1 làm vô hướng?

Trả lời

5

Tôi hoàn toàn không thấy nó phản trực giác. Trong Toán học có tồn tại vectơ của 1 chiều (mặc dù chúng là đẳng cấu với vô hướng). Ngoài ra, một ma trận hoàn toàn có thể có kích thước 1x1.

Đúng là một số duy nhất có thể được coi là vô hướng, ma trận 1-bit hoặc 1x1. xem Matlab là:

  • Một vô hướng được coi là một ma trận 1x1
  • Một n -vector chỉ là một 1 x n hoặc n x 1 ma trận
  • Tổng quát hơn: kích thước đuôi đơn không tính. Ví dụ, một mảng 3D có kích thước 2x3x4 cũng có thể được xem xét, ví dụ, một mảng 5D có kích thước 2x3x4x1x1.Này hoạt động mà không có lỗi:

    >> a = rand(2,3,4); 
    >> a(2,2,2) 
    ans = 
        0.2575 
    >> a(2,2,2,1,1) 
    ans = 
        0.2575 
    

Bây giờ, nếu bạn muốn kiểm tra xem A là một vector, ma trận, hoặc mảng đa chiều với nhiều hơn một yếu tố, sử dụng

numel(A)>1 

Các Hàm numel trả về số phần tử của đối số đầu vào của nó.

+0

Ngoài ra, đối với ma trận trống, chỉ 'ismatrix' trả về' true' cho '[]'. Tuy nhiên, cả 'ismatrix' và' isvector' trả về 'true' cho các số không rỗng (0)' hoặc 'nó chuyển vị. Câu trả lời này phù hợp với câu trả lời của bạn, tức là 'n' có thể là' 0'. – horchler

+0

@horchler Điểm tốt! –

4

Vì Matlab diễn giải vô hướng là 1-by-1 mảng, xem size documentation.


Do đó, tùy thuộc vào ứng dụng của bạn, bạn sẽ phải

  • sử dụng isscalar để phân biệt một vector từ một vô hướng (vì nó sẽ trở lại false cho một vector)
  • sử dụng isvector để phân biệt ma trận từ một vectơ (vì nó sẽ trả lại false cho ma trận)

Be gây ra nếu bạn đang cố gắng tìm ra nếu một biến là một véc tơ và không phải là một vô hướng và bạn sử dụng isvector, cả một vô hướng và một vectơ sẽ trả lại true - như được chỉ ra trong câu hỏi.

Các vấn đề liên quan