该模块为 matterhorn_pytorch.tnn
模块的函数库,存储所被调用的函数。主要为时空代数(Space-time Algebra)中的运算符。
在以下文档中,将单个神经元脉冲序列中首个脉冲产生的时间步记作
使用
将脉冲时间
t_to_s(
t: torch.Tensor,
time_steps: int,
t_offset: int = 0
) -> torch.Tensor
t (torch.Tensor)
:脉冲时间 [B, ...]
。
time_steps (int)
:转换成脉冲序列起始时间后的时间步长 t
。
t_offset (int)
:转换成脉冲序列的时间偏移量,加在起始时间前,脉冲时间步长为 T = t_offset + t
。
s (torch.Tensor)
:脉冲序列 [T, B, ...]
。
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
print(x)
y = TF.t_to_s(x, 8)
print(y)
时空代数的“延迟”算子。使用
代表脉冲整体向后推移
t_add(
x: torch.Tensor,
t: int
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
t (int)
:延迟时间
y (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
print(x)
y = TF.t_add(x, 3)
print(y)
时空代数的“最早”算子。使用
算子 | |||
---|---|---|---|
|
t_min(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_min(x, y)
print(z)
时空代数的“非同时最早”算子。使用
算子 | |||
---|---|---|---|
t_xmin(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_xmin(x, y)
print(z)
时空代数的“最晚”算子。使用
算子 | |||
---|---|---|---|
|
t_max(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_max(x, y)
print(z)
时空代数的“非同时最晚”算子。使用
算子 | |||
---|---|---|---|
t_xmax(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_xmax(x, y)
print(z)
时空代数的“同时”算子。使用
算子 | |||
---|---|---|---|
t_eq(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_eq(x, y)
print(z)
时空代数的“不同时”算子。使用
算子 | |||
---|---|---|---|
t_ne(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_ne(x, y)
print(z)
时空代数的“早于”算子。使用
算子 | |||
---|---|---|---|
t_lt(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_lt(x, y)
print(z)
时空代数的“早于或同时”算子。使用
算子 | |||
---|---|---|---|
t_le(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_le(x, y)
print(z)
时空代数的“晚于”算子。使用
算子 | |||
---|---|---|---|
t_gt(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_gt(x, y)
print(z)
时空代数的“晚于或同时”算子。使用
算子 | |||
---|---|---|---|
t_ge(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 t_
开头表明其为计算脉冲时间的函数,因此输入和输出为 [B, ...]
。
x (torch.Tensor)
:输入脉冲时间
y (torch.Tensor)
:输入脉冲时间
z (torch.Tensor)
:输出脉冲时间
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.randint(6, (10,)).float()
y = torch.randint(6, (10,)).float()
print(x)
print(y)
z = TF.t_ge(x, y)
print(z)
将脉冲序列
若脉冲序列上无脉冲,则输出
s_to_t(
s: torch.Tensor
) -> torch.Tensor
s (torch.Tensor)
:脉冲序列 [T, B, ...]
。
t (torch.Tensor)
:脉冲时间 [B, ...]
。
import torch
import matterhorn_pytorch.tnn.functional as TF
x = torch.tensor([
[0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 0],
[1, 1, 1, 0, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 0]
], dtype = torch.float)
print(x)
y = TF.s_to_t(x)
print(y)
时空代数的“延迟”算子。使用
代表脉冲整体向后推移
s_add(
x: torch.Tensor,
t: int
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
t (int)
:延迟时间
y (torch.Tensor)
:输出信号
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
y = TF.s_add(x, 3)
print(y)
时空代数的“最早”算子。使用
算子 | |||
---|---|---|---|
|
s_min(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_min(x, y)
print(z)
时空代数的“非同时最早”算子。使用
算子 | |||
---|---|---|---|
s_xmin(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_xmin(x, y)
print(z)
时空代数的“最晚”算子。使用
算子 | |||
---|---|---|---|
|
s_max(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_max(x, y)
print(z)
时空代数的“非同时最晚”算子。使用
算子 | |||
---|---|---|---|
s_xmax(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_xmax(x, y)
print(z)
时空代数的“同时”算子。使用
算子 | |||
---|---|---|---|
s_eq(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_eq(x, y)
print(z)
时空代数的“不同时”算子。使用
算子 | |||
---|---|---|---|
s_ne(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_ne(x, y)
print(z)
时空代数的“早于”算子。使用
算子 | |||
---|---|---|---|
s_lt(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_lt(x, y)
print(z)
时空代数的“早于或同时”算子。使用
算子 | |||
---|---|---|---|
s_le(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_le(x, y)
print(z)
时空代数的“晚于”算子。使用
算子 | |||
---|---|---|---|
s_gt(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_gt(x, y)
print(z)
时空代数的“晚于或同时”算子。使用
算子 | |||
---|---|---|---|
s_ge(
x: torch.Tensor,
y: torch.Tensor
) -> torch.Tensor
以 s_
开头表明其为计算脉冲序列的函数,因此输入和输出为 [T, B, ...]
。
x (torch.Tensor)
:输入脉冲序列
y (torch.Tensor)
:输入脉冲序列
z (torch.Tensor)
:输出脉冲序列
import torch
import matterhorn_pytorch.tnn.functional as TF
x = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
y = TF.t_to_s(torch.randint(6, (10,)).float(), 8)
print(x)
print(y)
z = TF.s_ge(x, y)
print(z)
[1] Hestenes D. Space-time algebra[M]. Switzerland: Springer International Publishing, 2015.
[2] Smith J. Space-time algebra: A model for neocortical computation[C]//2018 ACM/IEEE 45th Annual International Symposium on Computer Architecture (ISCA). IEEE, 2018: 289-300.