row/column-wise arrayfire 中的外积-python
row/column-wise outer product in arrayfire-python
如何在arrayfire-python中实现row/column-wise外积?
这里是 numpy 中的类比实现。
A = np.random.randint(1,7, size=(3,2))
B = np.random.randint(1,7, size=(2,3))
X = np.einsum('ik,kj->kij', A,B)
X
array([[[ 8, 16, 12],
[ 8, 16, 12],
[ 4, 8, 6]],
[[15, 3, 12],
[ 5, 1, 4],
[ 5, 1, 4]]])
P.S。我正在寻找小批量梯度下降实现的轻微加速,我找到了这个库。
这在 arrayfire 中不能用作本机函数。但是,您可以像这样使用广播和 moddims 实现一些东西:
>>> @af.broadcast
... def outer(a, b):
... am = af.moddims(a, a.shape[0], 1, a.shape[1])
... bm = af.moddims(b.T, 1, b.shape[1], b.shape[0])
... cm = am * bm
... return cm
...
>>> a
arrayfire.Array()
Type: float
[3 2 1 1]
0.6874 0.3552
0.9058 0.1589
0.5023 0.8857
>>> b
arrayfire.Array()
Type: float
[2 3 1 1]
0.2060 0.9028 0.7167
0.4522 0.0121 0.2723
>>> print(outer(a, b))
arrayfire.Array()
Type: float
[3 3 2 1]
0.1416 0.6206 0.4927
0.1866 0.8178 0.6492
0.1035 0.4535 0.3600
0.1606 0.0043 0.0967
0.0719 0.0019 0.0433
0.4006 0.0107 0.2412
如果您有任何特定的功能请求,请跟进 github:https://github.com/arrayfire/arrayfire-python/issues
如何在arrayfire-python中实现row/column-wise外积?
这里是 numpy 中的类比实现。
A = np.random.randint(1,7, size=(3,2))
B = np.random.randint(1,7, size=(2,3))
X = np.einsum('ik,kj->kij', A,B)
X
array([[[ 8, 16, 12],
[ 8, 16, 12],
[ 4, 8, 6]],
[[15, 3, 12],
[ 5, 1, 4],
[ 5, 1, 4]]])
P.S。我正在寻找小批量梯度下降实现的轻微加速,我找到了这个库。
这在 arrayfire 中不能用作本机函数。但是,您可以像这样使用广播和 moddims 实现一些东西:
>>> @af.broadcast
... def outer(a, b):
... am = af.moddims(a, a.shape[0], 1, a.shape[1])
... bm = af.moddims(b.T, 1, b.shape[1], b.shape[0])
... cm = am * bm
... return cm
...
>>> a
arrayfire.Array()
Type: float
[3 2 1 1]
0.6874 0.3552
0.9058 0.1589
0.5023 0.8857
>>> b
arrayfire.Array()
Type: float
[2 3 1 1]
0.2060 0.9028 0.7167
0.4522 0.0121 0.2723
>>> print(outer(a, b))
arrayfire.Array()
Type: float
[3 3 2 1]
0.1416 0.6206 0.4927
0.1866 0.8178 0.6492
0.1035 0.4535 0.3600
0.1606 0.0043 0.0967
0.0719 0.0019 0.0433
0.4006 0.0107 0.2412
如果您有任何特定的功能请求,请跟进 github:https://github.com/arrayfire/arrayfire-python/issues