Tengo algunas ecuaciones de álgebra lineal, que son unas pocas líneas sucintas de código pytorch, donde las matrices involucradas tienen dimensiones N
y D
y N
y D
suelen ser muy grandes. Yo quería realmente entender lo que están haciendo, así que empezó a trabajar a través de ellos para N=3, D=2. Así que empecé con esto:
|a b| |p r| |ap + bq ar + bs|
|c d| x |q s| = |cp + dq cr + ds|
|e f| |ep + fq er + fs|
Un par de largos y tediosos cálculos después, y tras reunir los términos, tuve esto:
aa(pt+rv) + ab(pu+rw) + ab(qt+sv) + bb(qu+sw) ac(pt+rv) + ad(pu+rw) + bc(qt+sv) + bd(qu+sw) ae(pt+rv) + af(pu+rw) + be(qt+sv) + bf(qu+sw)
ac(pt+rv) + bc(pu+rw) + ad(qt+sv) + bd(qu+sw) cc(pt+rv) + cd(pu+rw) + cd(qt+sv) + dd(qu+sw) ce(pt+rv) + cf(pu+rw) + de(qt+sv) + df(qu+sw)
ae(pt+rv) + be(pu+rw) + af(qt+sv) + bf(qu+sw) ce(pt+rv) + de(pu+rw) + cf(qt+sv) + df(qu+sw) ee(pt+rv) + ef(pu+rw) + ef(qt+sv) + ff(qu+sw)
Lo cual fue muy útil, pero yo cortaría uno de los cálculos, y también me hizo ver que quiero saber cómo se ve cuando D y N son ligeramente más grandes.
¿Hay algún software o biblioteca que pueda utilizar para que el ordenador haga este trabajo duro por mí? Es decir, donde escribiría este código:
x = torch.tensor([ [1.0,2], [3,4], [5,6] ])
M = torch.tensor([ [0.1, 0.3], [0.7, 0.5] ])
y = x.matmul(M)
Quiero escribir algo como:
x = torch.tensor([ ['a', 'b'], ['c', 'd'], ['e', 'f'] ])
M = torch.tensor([ ['p', 'r'], ['q', 's'] ])
y = x.matmul(M)
Si se reunió como términos para mí que sería una ventaja, pero no es esencial. No está vinculado a un lenguaje informático en particular, por lo que cualquiera de Python, R, Octave/Matlab, C++, etc.