概念

プロファイル

コンストラクタは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 は配列を複製した新しいテンソルを返します。