2016-03-18 141 views
1

我需要做到以下幾點:創建虛擬變量在Scilab的

A = [1,2,3; 0,4,0; 0,5,6] 
B = krone (A, A) 
C = sparse (dummy (B)) 

誰能告訴我如何在Scilab的虛擬變量。我正在尋找一個相當於Matlab中虛擬變量的命令。

+0

你正在尋找一個Scilab相當於Matlab的[dummyvar](http://www.mathworks.com/help/stats/dummyvar.html)嗎? –

+0

是的!我想要一個相當於虛擬變量Matlab到Scilab的命令。 –

回答

1

在Matlab中沒有內置Scilab版本的dummyvar命令,但這裏有一個功能,它對數字數據也是這樣。使用的

function D = dummyvar(B) 
    m = size(B, 1) 
    D = zeros(m, 0) 
    for j = 1:size(B, 2) 
     E = zeros(m, max(B(:, j))) 
     for i = 1:m 
      E(i, B(i, j)) = 1 
     end 
     D = [D, E] 
    end 
endfunction 

實施例:

B = [1 2 1; 3 1 2; 1 2 2] 
dummyvar(B) 

輸出:

1. 0. 0. 0. 1. 1. 0. 
0. 0. 1. 1. 0. 0. 1. 
1. 0. 0. 0. 1. 0. 1. 

該輸出是相同的在Matlab返回dummyvar

引述documentation

如果基團是數字矢量或矩陣,在任何列中的值必須在範圍內的正整數從1到水平的用於相應可變

這是我的函數支持的唯一一種數據;它不處理分類數據。我會指出你給出的代碼示例也會在Matlab中拋出一個錯誤,因爲矩陣是數字並且包含零。

+0

沒錯。但我認爲只有零的列不應該存在,因爲命令在第一列中考慮了兩個。請參閱Matlab示例。 ([Example])(http://www.mathworks.com/help/stats/dummyvar.html) –

+0

Matlab中的dummyvar需要矩陣中的_all_值爲正整數,如果矩陣是數值的話。一列會導致錯誤。 –