邏輯值(Logical Values)

Octave 內建支援邏輯值(truefalse)與相關的邏輯運算:AND(&)、OR(|)與 NOT(!)。

除了邏輯運算之外,Octave 亦允許在算術運算式中使用邏輯值,邏輯值在進行算術運算時會自動轉為雙精度浮點數,true 轉會 1false 轉換為 0,因此

true * 22 - false / 6

結果是 22

邏輯值亦可以使用在矩陣的索引與巢狀陣列上,當矩陣使用一個邏輯像像當作索引時,會將矩陣中對應邏輯向量為 true 的元素取出,例如:

data = [1, 2; 3, 4]
idx = (data <= 2)
data(idx)

這會將 data 矩陣中小於或等於 2 的元素取出,另外一種比較精簡的寫法:

data(data <= 2)

邏輯值的建立可以從數值資料轉換而得到,或是直接使用 truefalse 函數。

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,例如 33 的方陣:

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 還是維持 22 的雙精度浮點數。