在 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