1

如何在arrayfire-python中实现行/列外积?

这是 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]]])

PS 我正在寻找小批量梯度下降的实现速度,我找到了这个库。

4

1 回答 1

1

这在 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

于 2017-08-11T17:05:06.063 回答