概念¶
プロファイル¶
コンストラクタは3種類のプロファイルを受け取ります。
ラベル付き。
[[domain の群], [codomain の群]]。各群は文字列のリストで、 次元はその長さです。数値。
[[domain の長さ], [codomain の長さ]]。各要素はintです。タプル。
(domain の長さ, codomain の長さ)。この形はラベルなしです。
profile は常に数値の長さ [[domain], [codomain]] を返します。
labels は (domain の群, codomain の群) を返します。空の側や、もともと
ラベルが無い側は [] ではなく None です。
軸 0 は domain の最初の因子です。domain の因子のあと、軸番号は codomain に
続きます。get_label_index(axis, label) はその軸での label の位置です。
get_index_label(axis, index) はその逆です。ラベルが無いとき、またはその軸に
label が無いときは、どちらも ValueError です。
import numpy as np
from fxtensor_salmon import FXTensor
labeled = FXTensor(
[[["Urban", "Rural"]], [["Spring", "Summer", "Other"], ["Sunny", "Rainy"]]],
data=np.zeros((2, 3, 2)),
)
assert labeled.profile == [[2], [3, 2]]
assert labeled.labels == (
[["Urban", "Rural"]],
[["Spring", "Summer", "Other"], ["Sunny", "Rainy"]],
)
assert labeled.get_label_index(0, "Rural") == 1
assert labeled.get_label_index(1, "Summer") == 1
assert labeled.get_index_label(2, 0) == "Sunny"
numeric = FXTensor([[2], [3, 2]], data=np.zeros((2, 3, 2)))
assert numeric.labels == (None, None)
as_tuple = FXTensor(([2], [3]), data=np.zeros((2, 3)))
assert as_tuple.profile == [[2], [3]]
assert as_tuple.labels == (None, None)
データ¶
data は形状 tuple(domain の長さ + codomain の長さ) の NumPy 配列です。
省略するとすべて 0 です。プロファイルと形状が合わないと ValueError です。
空のプロファイル [[], []] はモノイド単位で、データは 0 次元配列です。
import numpy as np
from fxtensor_salmon import FXTensor
zeros = FXTensor([[2], [2]])
assert np.array_equal(zeros.data, np.zeros((2, 2)))
scalar = FXTensor([[], []], data=np.array(1.0))
assert scalar.profile == [[], []]
assert scalar.data.shape == ()
assert float(scalar.data) == 1.0
try:
FXTensor([[2], [2]], data=np.ones((2, 3)))
except ValueError:
pass
else:
raise AssertionError("data shape must match the profile")
plain = FXTensor([[2], [2]], data=np.eye(2))
try:
plain.get_label_index(0, "a")
except ValueError:
pass
else:
raise AssertionError("unlabeled tensors have no label lookup")
状態と核¶
状態は domain が空です。核は domain が空ではありません。図式がモノイド単位から
始まる操作は状態に限られます。
conditionalization()、
jointification()、そして
bayesian_inversion() と
almost_surely_equal() の prior です。
等価比較は、プロファイルとラベルに加え、FXTensor._RTOL``(``1e-05)と
FXTensor._ATOL``(``1e-08)による numpy.allclose でデータを比べます。
copy は配列を複製した新しいテンソルを返します。