矩阵除以另一个矩阵的行,在 theano 中没有循环
matrix divided by rows of another matrix, without a loop in theano
以下代码在不使用循环的情况下的等效 theano 实现是什么?
dt = np.dtype(np.float32)
a=[[12,3],
[2,4],
[2,4],]
b=[[12,3,2,3],
[2,4,4,5]]
a=np.asarray(a,dtype=dt)
b=np.asarray(b,dtype=dt)
print(a.shape)
print(b.shape)
ainvb=np.zeros((3,2,4))
for i in range(4):
ainvb[:,:,i]=a/b[:,i].T
numpy中的循环也可以替换为:
ainvb=a[:,:,None]/b
我需要做的是将 "a" 的列除以 "b" 的每一行。最后,将有 4 个大小为 3*2(大小为 "a")的矩阵,其中每个矩阵 "a" 除以 "b".
的行之一
-问候
这在 Theano 中的工作方式与在 numpy 中的工作方式相同。这是比较三种方法的脚本:
import numpy as np
import theano
import theano.tensor as tt
def numpy_v1(a, b):
ainvb = np.zeros((3, 2, 4))
for i in range(4):
ainvb[:, :, i] = a / b[:, i].T
return ainvb
def numpy_v2(a, b):
return a[:, :, None] / b
def compile_theano_v1():
a, b = tt.matrices('a', 'b')
return theano.function([a, b], a[:, :, None] / b)
def main():
dt = np.dtype(np.float32)
a = [[12, 3],
[2, 4],
[2, 4], ]
b = [[12, 3, 2, 3],
[2, 4, 4, 5]]
a = np.asarray(a, dtype=dt)
b = np.asarray(b, dtype=dt)
print(a.shape)
print(b.shape)
theano_v1 = compile_theano_v1()
numpy_v1_ainvb = numpy_v1(a, b)
numpy_v2_ainvb = numpy_v2(a, b)
theano_v1_ainvb = theano_v1(a, b)
assert np.allclose(numpy_v1_ainvb, numpy_v2_ainvb)
assert np.allclose(numpy_v2_ainvb, theano_v1_ainvb)
main()
以下代码在不使用循环的情况下的等效 theano 实现是什么?
dt = np.dtype(np.float32)
a=[[12,3],
[2,4],
[2,4],]
b=[[12,3,2,3],
[2,4,4,5]]
a=np.asarray(a,dtype=dt)
b=np.asarray(b,dtype=dt)
print(a.shape)
print(b.shape)
ainvb=np.zeros((3,2,4))
for i in range(4):
ainvb[:,:,i]=a/b[:,i].T
numpy中的循环也可以替换为:
ainvb=a[:,:,None]/b
我需要做的是将 "a" 的列除以 "b" 的每一行。最后,将有 4 个大小为 3*2(大小为 "a")的矩阵,其中每个矩阵 "a" 除以 "b".
的行之一-问候
这在 Theano 中的工作方式与在 numpy 中的工作方式相同。这是比较三种方法的脚本:
import numpy as np
import theano
import theano.tensor as tt
def numpy_v1(a, b):
ainvb = np.zeros((3, 2, 4))
for i in range(4):
ainvb[:, :, i] = a / b[:, i].T
return ainvb
def numpy_v2(a, b):
return a[:, :, None] / b
def compile_theano_v1():
a, b = tt.matrices('a', 'b')
return theano.function([a, b], a[:, :, None] / b)
def main():
dt = np.dtype(np.float32)
a = [[12, 3],
[2, 4],
[2, 4], ]
b = [[12, 3, 2, 3],
[2, 4, 4, 5]]
a = np.asarray(a, dtype=dt)
b = np.asarray(b, dtype=dt)
print(a.shape)
print(b.shape)
theano_v1 = compile_theano_v1()
numpy_v1_ainvb = numpy_v1(a, b)
numpy_v2_ainvb = numpy_v2(a, b)
theano_v1_ainvb = theano_v1(a, b)
assert np.allclose(numpy_v1_ainvb, numpy_v2_ainvb)
assert np.allclose(numpy_v2_ainvb, theano_v1_ainvb)
main()