Entonces tengo 2 matrices. A = 2x2 y B = 3x2. Estoy tratando de exponencializar cada columna respectivamente de la matriz A por los valores de la matriz B y luego obtener el producto de cada fila. Así por ejemplo,

A=[[1,1],[0,0]]
B=[[1,1],[0,0],[2,2]]

Si tomamos la primera fila de A y calculamos el valor, la salida será

[[1^1,1^1], [1^0, 1^0], [1^2,1^2]]

Luego toma el producto de cada fila así:

[1, 1, 1]

Luego, para la segunda fila

[[0^1,0^1],[0^0,0^0],[0^2,0^2]]

El producto de cada fila debe ser

[0, 1, 0]

La salida final debe ser

[[1,0],[1,1],[1,0]]

Entonces, para una fila A, digamos que es 1x2, entonces cada elemento debe ponerse a la potencia de los valores de la fila en la matriz B. Por lo tanto, la columna i de la fila A debe exponenciarse por todos los valores en la columna i de B.

0
user8714896 13 jul. 2021 a las 04:31

3 respuestas

La mejor respuesta
np.swapaxes(np.product(A[:,np.newaxis,:]**B, axis = -1), 0, 1)

Da una salida de

array([[1, 0],
       [1, 1],
       [1, 0]])

Para comprender los pasos en esto, le sugiero que lea sobre el corte básico y la transmisión en NumPy, mientras observa las formas / dimensiones de la matriz.

1
BatWannaBe 13 jul. 2021 a las 02:52

Esto es lo que se me ocurrió:

Su matriz resultante, que llamé C tiene la forma

C[0,0] = (A[0,0]**B[0,0])*(A[0,1]**B[0,1])
C[1,0] = (A[0,0]**B[1,0])*(A[0,1]**B[1,1])
C[2,0] = (A[0,0]**B[2,0])*(A[0,1]**B[2,1])
C[0,1] = (A[1,0]**B[0,0])*(A[1,1]**B[0,1])
C[1,1] = (A[1,0]**B[1,0])*(A[1,1]**B[1,1])
C[2,1] = (A[1,0]**B[2,0])*(A[1,1]**B[2,1])

Que se puede escribir como

C[i,j] = (A[j,0]**B[i,0])*(A[j,1]**B[i,1])

Así que creo que esto puede funcionar para ti o adaptarse a algo más cercano a lo que quieres.

import numpy as np
from numpy import *

A=np.array([[1,1],[0,0]])
B=np.array([[1,1],[0,0],[2,2]])

C = np.zeros((B.shape[0],A.shape[0]))

for i in range(B.shape[0]):
    for j in range(A.shape[0]):
        C[i,j] = (A[j,0]**B[i,0])*(A[j,1]**B[i,1])

La salida es la deseada

print(C)

[[1. 0.]
 [1. 1.]
 [1. 0.]]
0
Bruno Magacho 13 jul. 2021 a las 02:32
In [238]: A=np.array([[1,1],[0,0]])
     ...: B=np.array([[1,1],[0,0],[2,2]])
In [239]: A.shape, B.shape
Out[239]: ((2, 2), (3, 2))

Tu primera fila de A

In [241]: A[0,:]**B
Out[241]: 
array([[1, 1],
       [1, 1],
       [1, 1]])

2da fila:

In [242]: A[1,:]**B
Out[242]: 
array([[0, 0],
       [1, 1],
       [0, 0]])

Y los productos:

In [243]: (A[0,:]**B).prod(axis=1)
Out[243]: array([1, 1, 1])
In [244]: (A[1,:]**B).prod(axis=1)
Out[244]: array([0, 1, 0])

Ahora con todo A:

In [245]: (A[:,None]**B)
Out[245]: 
array([[[1, 1],
        [1, 1],
        [1, 1]],

       [[0, 0],
        [1, 1],
        [0, 0]]])
In [246]: (A[:,None]**B).prod(axis=2)
Out[246]: 
array([[1, 1, 1],
       [0, 1, 0]])

La versión del comentario obtiene los mismos números, pero con un resultado transpuesto:

In [251]: (A**B[:,:,None]).prod(axis=2)
Out[251]: 
array([[1, 0],
       [1, 1],
       [1, 0]])

La forma (2,2) de A y columnas iguales crea un poco de ambigüedad.

Haga una matriz (1,2):

In [252]: A1 = A[[1],:]
In [253]: A1.shape
Out[253]: (1, 2)
In [254]: (A1[:,None]**B).prod(axis=2)
Out[254]: array([[0, 1, 0]])

In [258]: (A1**B[:,:,None]).prod(axis=2)
Out[258]: 
array([[0, 0],
       [1, 1],
       [0, 0]])
0
hpaulj 13 jul. 2021 a las 03:05