ось вне границ с массивом - PullRequest
0 голосов
/ 13 декабря 2018

Я написал код, который выглядит следующим образом.

import numpy as np
import math
p0 = np.loadtxt('A.txt', delimiter=',')
p1 = np.loadtxt('B.txt', delimiter=',')
p3 = np.loadtxt('C.txt', delimiter=',')
p = np.loadtxt('D.txt', delimiter=',')
d = 3
def distvec(p0,p1,p3,p,d):
    vec=[]
    for j in range(d):
        p0 = p0[j]
        p1 = p1[j]
        p3 = p3[j]
        p =  p[j]
        u = p0 - p3
        v = p1 - p3
        n = np.cross(u, v)
        norm = math.sqrt(np.dot(n,n))**(-1)
        n=n*norm
        p_ = p - p0
        dist_to_plane = np.dot(p_, n)
        dist=math.sqrt(dist_to_plane**2)
        vec=vec+[dist]
    return vec
distvec(p0,p1,p3,p,d)

Текстовые файлы выглядят примерно так.

A.txt

23.172,-20.751,31.982
23.049,-20.789,32.164
22.914,-20.952,32.14

B.txt

21.879,-17.819,34.467
21.727,-17.975,34.311
21.804,-18.267,34.462

C.txt

20.273,-20.379,34.271
20.144,-20.614,34.36
20.065,-20.765,34.408

D.txt

21.936,-19.639,33.555
21.771,-19.7,33.506
21.581,-19.955,33.543

Тем не менее, я получаю сообщение об ошибке:

Файл "test.py", строка 25, в distvec (p0, p1, p3, p, d) Файл "test.py"строка 17 в файле distvec n = np.cross (u, v) "/Users/Sam/anaconda3/lib/python3.6/site-packages/numpy/core/numeric.py" строка 1709 в поперечной осиa= normalize_axis_index (axisa, a.ndim, msg_prefix = 'axisa') numpy.core._internal.AxisError: axisa: axis -1 выходит за границы массива измерения 0

Кто-нибудь знает, что пошло не так?Большое спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

np.cross(u, v) возвращает перекрестное произведение двух векторов.В вашем случае u и v - это не векторы, а скаляры, имеющие размерность 0. Это потому, что у вас есть u = p0 - p3, где p0 и p3 являются j -ым элементом вашего массива (p0 = p0[j]).

Чтобы проверить, вы можете напечатать u и v и проверить, являются ли они скалярами или массивом 1-й (векторы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...