86854
numpyで以下のような処理をしたいと思っています。

```

    import numpy as np
    a = np.array([1,2,3])
    b = np.array([4,5,6])
    
    x = np.zeros(3,3)
    
    for i in range(3):
      for j in range(3):
        x[i,j] = x[i,j] + a[i]*b[j]
    
```

この例の場合だと

```

    x = [[1*4, 1*5, 1*6], [2*4, 2*5, 2*6], [3*4, 3*5, 3*6]]
      = [[4, 5, 6], [8, 10, 12], [12, 15, 18]]
    
```

を算出したいです。  
np.matmulを使うと1×4+2×5+3×6=32となってしまいます。良い方法はないでしょうか。

またもし可能であれば、最終的には

```

    import numpy as np
    a = np.array([[1,2,3], [10,20,30]])
    b = np.array([[4,5,6], [40,50,60]])
    
    x = np.zeros(2,3,3)
    
    for k in range(2):
      for i in range(3):
        for j in range(3):
          x[i,j] = x[i,j] + a[k,i]*b[k,j]
    
```

を行いたいと思っています。kは数万程度、i,jは数千程度です。  
もし良い方法や高速に計算できる方法をご存じであれば、教えて頂けると幸いです。
CC BY-SA 4.0
2022-03-16T04:21:56.547
86852
2022-03-16T05:41:25.043
30785
question
python numpy
pythonのnumpyでベクトルどうしの掛け算をしたい
```

    import numpy as np
    
    a = np.array([1,2,3])
    b = np.array([4,5,6])
    
    result = a[:, None] * b
    print(result)
    
    #
    array([[ 4,  5,  6],
           [ 8, 10, 12],
           [12, 15, 18]])
    
```

> 最終的には
```

    a = np.array([[1,2,3], [10,20,30]])
    b = np.array([[4,5,6], [40,50,60]])
    
    print(a[:,:,None] * b[:,None])
    
    #
    array([[[   4,    5,    6],
            [   8,   10,   12],
            [  12,   15,   18]],
    
           [[ 400,  500,  600],
            [ 800, 1000, 1200],
            [1200, 1500, 1800]]])
    
```
CC BY-SA 4.0
2022-03-16T05:05:39.880
86854
2022-03-16T05:41:25.043
2022-03-16T05:41:25.043
47127
47127
86852
answer