Skip to content

longwarriors/Vectorize-through-Broadcasting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Vectorize scaler function through broadcasting

利用numpy.array类和torch.tensor类的广播机制,把标量函数改造为张量函数。

  标量函数是输入一个或多个自变量,输出一个标量函数值:

$$ y=f(x_1, x_2,\cdots) $$

Method-1

  为了并行计算多种输入情况,可以采用Python自带的map函数

def add_two(x1, x2):
    return x1 + x2 

a = [1, 2]
b = [3, 4]
iterator = map(add_two, a, b)
res = list(iterator)
print(res)

map还能实现类似数组广播的功能

def add_two(x1, x2):
    return x1 + x2 

a = [1, 2, 3, 4, 5]
iterator = map(lambda x: add2(x, 3), b)
res = list(iterator)
print(res)

Method-2

  根据张量网络 (tensor network) 的知识,每个自变量 $x_i$ 的多种取值,就相当于控制变量法,多个自变量的多种取值就相当于对结果扩维,类似于张量积 (tensor product)。下面用概率张量来举例并行计算的张量元素:
概率张量

  概率张量可以展开成标量结果列表:
标量列表

  下面就可以利用numpy.arraytorch.tensor类的自动广播功能来把标量结果列表改造为张量结果。

$$ Y^{i,j,k} = F(x_1^i, x_2^j, x_3^k) $$

  触发自动广播的核心代码为

x1 = x1.reshape(-1, 1, 1)
x2 = x2.reshape(1, -1, 1)
x3 = x3.reshape(1, 1, -1)

  本项目用高斯波包生成函数 $G(k,\sigma,\mu,x)$ 来示范矢量化改造,即生成四阶张量 $\mathsf{G}^\mathbf{k,\sigma,\mu,x}$,然后对张量切片即可得到不同参数的控制变量结果。
切片控制变量

About

标量函数的张量化并行加速

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages