2012-11-06 33 views
21

創建邏輯矩陣我迄今已使用如何直接在MATLAB

a = logical(zeros(10,10)) 

創建邏輯矩陣。

有沒有辦法直接創建它?

回答

-1

Matlab的邏輯數據類型似乎並不具有比logical函數本身以外的構造。話雖這麼說,你可以有效地強制轉換雙陣列作爲一個邏輯陣列非常容易,所有非零值變爲邏輯1,全零邏輯0:

A = [1 0 2; -1 0 0; 0 1.53 -100.00] 

B = logical(A) 

B = 
    1  0  1 
    1  0  0 
    0  1  1 

可以很明顯的,如果你這個任務凝結成一條線」因此它變得與分配任何其他數據類型一樣簡單。

+0

退房我的答案中的鏈接 - 「false」和「true」可以像'zeros'和'ones'一樣使用,直接初始化邏輯矩陣而不是雙精度矩陣。 – tmpearce

+0

同意,儘管它只初始化一個完全真實的或完全錯誤的數組 - 這可能很好,或者你可能想要直接控制值。你能以這種方式利用真假嗎?或者你堅持使用雙數組的邏輯? – nicktruesdale

+0

答案:如果你不介意大數組的笨拙語法,a = [false,true;虛假]直接工作。 – nicktruesdale

8

在Matlab中,有一些實際上是矩陣生成命令的「常量」。它們是:

true(10); true(n,m,k,..); % for an all-true 10-by-10 or n-by-m-by-k-by-...matrix 
false(10); false(n,m,k,..); % for an all-false 10-by-10 or n-by-m-by-k-by-...matrix 
inf(10); inf(n,m,k,..); % for an all-inf 10-by-10 or n-by-m-by-k-by-...matrix 
nan(10); nan(n,m,k,..); % for an all-nan 10-by-10 or n-by-m-by-k-by-...matrix 

的「常量」形式基本上只是別名:

a = inf; % alias for a = inf(1); 
b = true; % alias for b = true(1); 

等。另外,這裏有一些更多的東西,不能重複足夠:

rand(10); rand(n,m,k,..); % for an all-random 10-by-10 or n-by-m-by-k-by-...matrix 
zeros(10); zeros(n,m,k,..); % for an all-zero 10-by-10 or n-by-m-by-k-by-...matrix 
zeros(n,m,k,...,'uint8');  % for an all-zero n-by-m-by-k-by-...matrix of type uint8 
ones(10); zeros(n,m,k,..); % for an all-one 10-by-10 or n-by-m-by-k-by-...matrix 
ones(n,m,k,...,'uint8');  % for an all-one n-by-m-by-k-by-...matrix of type uint8 
eye(10); eye(n,m,'uint8'); % for an identity matrix of type uint8 of 10-by-10 or n-by-m