邏輯值(Logical Values)
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
的雙精度浮點數。