在 Octave 中有許多種類型(type)的變數,例如實數(real)或複數(complex)的純量(scalars)或矩陣(matrices)、字串(character strings)、資料結構(data structure)以及可以包含各種類型的巢狀陣列(cell arrays)。
Octave 亦允許使用者透過 C++ 程式語言自行撰寫程式碼定義新的變數類型,新增變數類型並不需要將所有的 Octave 程式碼重新編譯,在某些系統中新的變數類型可以在 Octave 執行時動態載入(可參考動態載入函數、自訂變數類型)。
typeinfo (expr)
typeifno(expr) 函數會傳回 expr 的變數類型(type),若是沒有指定 expr 參數,則回傳目前所有的支援的變數類型。
內建的資料類型(Built-in Data Types)
Octave 內建的資料類型包含實數(real)與複數(complex)的純量(scalars)與矩陣(matrices)、ranges、字串(character strings)、資料結構(data structure)與巢狀陣列(cell array),在未來 Octave 亦有可能再新增加其他的資料類型。
變數的資料類型可以透過以下的函數查詢與轉換:
class (expr) class (s, id) class (s, id, p, ...)
class(expr) 可以查詢 expr 的類別(class),class(s, id) 則是產生新的類別,參數 s 是指定新類別的資料結構(structure),id 是新類別的名稱。其餘的參數是用來指定此類別的父類別。
isa (x, class)
isa(x, class) 函數可以用來測試 x 的類別是否為 class。
cast (val, type)
cast(val, type) 函數可將 val 轉換為 type 類型。
typecast (x, type)
typecast(x, type) 將 x 轉換為 type 類型,但不變更 x 所儲存的資料。type 參數可以是下列其中之一: "uint8"、 "uint16"、 "uint32"、 "uint64"、 "int8"、 "int16"、 "int32"、 "int64"、 "single" 或 "double"。例如:
x = uint16 ([1, 65535]); typecast (x, "uint8")
swapbytes (x)
swapbytes(x) 函數可將 x 的值在 little endian 與 big endian 之間轉換。例如:
swapbytes (uint16 (1:4))
以下介紹 Octave 中內建的資料類型:
數值(Numeric Objects)
Octave 中的數值變數包含實數、複數與整數的純量與矩陣,所有 Octave 內建的浮點數資料都是以雙精度浮點數(double precision numbers)的方式儲存,在使用 IEEE 浮點格式的系統中,可儲存的浮點數範圍大約在 2.2251e-308 到 1.7977e+308 之間,relative precision 大約為 2.2204e-16,精確的數值儲存在 realmin、 realmax 與 eps 變數中。
在 Octave 中的矩陣可以指定為任何的大小,甚至可以動態改變。Octave 中提供一系列的矩陣操作功能,進一步的說明請參考數值資料。
缺失資料(Missing Data)
缺失資料在 Octave 可以使用 NA(Not Available)來表示:
NA NA (n) NA (n, m) NA (n, m, k, ...) NA (..., class)
NA 函數可以產生 NA 的純量,NA(n) 是 n 乘 n 的 NA 方陣,NA(n, m) 是 n 乘 m 的 NA 矩陣,NA(n, m, k, ...) 是高維度的 NA 陣列,class 參數是指定傳回值的類型,可指定 "double" 或 "single",例如指定一個 NA 值:
na_val = NA
3 乘 3 的 NA 矩陣:
na_mat = NA(3)
isna (x)
isna() 函數可以檢查一個值是否為 NA,例如:
isna ([13, Inf, NA, NaN])
字串(String Objects)
Octave 的字串是以單引號或雙引號包起來的一串字元,目前來說 Octave 是將字串儲存乘矩陣的形式,因此在矩陣上可以用的索引運算亦可用於字串上,關於字串的說明請參考字串資料。
資料結構(Data Structure Objects)
Octave 的資料結構可以讓使用者將相關但不同類型的資料結合在一起,目前 Octave 是以關聯性陣列的方式實做,而其語法類似於 C 語言的 structures,關於資料結構請參考資料容器。
巢狀陣列(Cell Array Objects)
Octave 的巢狀陣列是一個一般性的陣列,可以存放各種不同的類型的資料,請參考資料容器。
繼續閱讀: 12