まず以下のようにして、  
ベクトルxとベクトルyの角度を計算する関数を書きます。

```

    import numpy as np
    
    def angle(x, y):
    
        dot_xy = np.dot(x, y)
        norm_x = np.linalg.norm(x)
        norm_y = np.linalg.norm(y)
        cos = dot_xy / (norm_x*norm_y)
        rad = np.arccos(cos)
        theta = rad * 180 / np.pi
    
        return theta
    
```

次にこの関数を用いて、  
以下のベクトルxとベクトルyの角度を計算します。

```

    x = np.array([1, 0, 1])
    y = np.array([1, 1, 1])
    print angle(x, y)
    
```

この結果はもちろん、45.0となります。

ここで、上記のベクトルxと以下のベクトルzの角度を計算します。

```

    z = np.array([1, -1, 1])
    print angle(x, z)
    
```

この場合ももちろん、上記と同じ角度である45.0が出力されます。

しかしここで、  
xとyで計算した時を「正の方向」とした上で、  
xとzの角度は45.0ではなく、315.0と出力したいです。

numpyではどのようにすれば、  
ベクトルの向きを固定して角度を計算することができるでしょうか？

よろしくお願いします。
CC BY-SA 3.0
2016-03-19T10:25:29.407
23275
2016-04-18T13:46:17.893
2016-03-19T11:12:06.470
12874
12874
question
python numpy
numpyでベクトルの向きを考慮して2つのベクトル間の角度を計算したい
コメントを頂いた通り、符号の判定で解決できる問題でした。  
お手数をおかけしました。ありがとうございます。
CC BY-SA 3.0
2016-03-19T11:14:40.157
23276
2016-03-19T11:14:40.157
12874
23275
answer