Octave 內建支援邏輯值(true 與 false)與相關的邏輯運算:AND(&)、OR(|)與 NOT(!)。
除了邏輯運算之外,Octave 亦允許在算術運算式中使用邏輯值,邏輯值在進行算術運算時會自動轉為雙精度浮點數,true 轉會 1,false 轉換為 0,因此
true * 22 - false / 6
結果是 22。
邏輯值亦可以使用在矩陣的索引與巢狀陣列上,當矩陣使用一個邏輯像像當作索引時,會將矩陣中對應邏輯向量為 true 的元素取出,例如:
data = [1, 2; 3, 4] idx = (data <= 2) data(idx)
這會將 data 矩陣中小於或等於 2 的元素取出,另外一種比較精簡的寫法:
data(data <= 2)
邏輯值的建立可以從數值資料轉換而得到,或是直接使用 true 與 false 函數。
logical (arg)
logical(arg) 會將 arg 轉換為邏輯值(0 轉換為 false,除了 0 以外的值轉換為 true)。例如:
logical([-1, 0, 1])
與
[-1, 0, 1] != 0
所得到的結果是相同的。
true (x) true (n, m) true (n, m, k, ...)
傳回各種維度的邏輯值陣列,陣列中所有的元素都是 true,例如 3 乘 3 的方陣:
true(3)
3 乘 2 的矩陣:
true(3, 2)
更高維度的陣列:
true(3, 4, 2)
false (x) false (n, m) false (n, m, k, ...)
傳回各種維度的邏輯值陣列,陣列中所有的元素都是 false,使用方法與 true() 函數相同。
在 Octave 中有許多運算子可以接受不同的變數類型,而 Octave 預設會將精確度較高的數值類型轉換為較低的數值類型再進行運算,這與一般程式語言中的習慣是不同的,例如:將一個 8 位元的整數與浮點數相加:
a = uint8(1) + 1
這裡的浮點數 1 會被轉型為 8 位元的整數,因此所得到的 a 是一個 8 位元的整數。而單精度浮點數與雙精度浮點數相加:
b = single(1) + 1
所得到的 b 則是單精度浮點數。
以下是各種類型的數值運算組合與所得到的結果類型:
| 混合運算 | 結果 |
|---|---|
| double OP single | single |
| double OP integer | integer |
| double OP char | double |
| double OP logical | double |
| single OP integer | integer |
| single OP char | single |
| single OP logical | single |
這個規則亦可套用至函數的參數,例如:
min(single(1), 0)
這會傳回單精度浮點數的數值。
陣列中的值以索引的方式指定成其他類型的數值時,陣列中的數值類型不會改變,例如:
x = ones(2, 2) x(1, 1) = single(2)
得到的 x 還是維持 2 乘 2 的雙精度浮點數。