LoginSignup
0
0

More than 5 years have passed since last update.

MATLAB: dot(x1, x2, 2) > dot product > Numpy: 実装 v0.1, v0.2 > 一次元と二次元は確認

Last updated at Posted at 2017-11-22
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)

MATLAB

参考: https://jp.mathworks.com/help/matlab/ref/dot.html

K>> x1 = [ 3 1 4; 1 5 9 ];
K>> x2 = [ 2 6 5; 3 5 8 ];
K>> res = dot(x1, x2, 2)

res =

    32
   100

Numpy 実装 v0.1

参考: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.dot.html

上記をNumpy実装してみた。

test_dotproduct_171123.py
import numpy as np

# on Python 3.5.2


def calc_dotProduct_2d(x1, x2):
    ndim = len(x1)
    res = []
    for idx in range(ndim):
        res += [np.dot(x1[idx], x2[idx])]
    return res


x1 = [[3, 1, 4], [1, 5, 9]]
x2 = [[2, 6, 5], [3, 5, 8]]

res = calc_dotProduct_2d(x1, x2)
print(res)

run
$ python3 test_dotproduct_171123.py 
[32, 100]

3次元でも使えるかもしれないが、今は試さない。
1次元ではMATLABと答えが異なる。MATLABと合わせるにはnp.sum()が必要になる。

Numpy 実装 v0.2

1次元対応した。

test_dotproduct_171123.py
import numpy as np

# on Python 3.5.2


def calc_dotProduct(x1, x2):
    ndim = x1.ndim
    if ndim == 1:
        return np.sum(np.dot(x1, x2))

    res = []
    for idx in range(ndim):
        res += [np.dot(x1[idx], x2[idx])]
    return np.array(res)


def test_dotProduct_1d():
    x1 = np.array([3, 1, 4])
    x2 = np.array([2, 6, 5])
    res = calc_dotProduct(x1, x2)
    print(res)


def test_dotProduct_2d():
    x1 = np.array([[3, 1, 4], [1, 5, 9]])
    x2 = np.array([[2, 6, 5], [3, 5, 8]])
    res = calc_dotProduct(x1, x2)
    print(res)


test_dotProduct_1d()
test_dotProduct_2d()
run
$ python3 test_dotproduct_171123.py 
32
[ 32 100]
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0