【问题标题】:axis out of bounds with array轴超出数组范围
【发布时间】:2018-12-13 12:46:15
【问题描述】:

我写了一个类似这样的代码。

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 行,交叉 axisa = normalize_axis_index(axisa,a.ndim,msg_prefix='axisa') numpy.core._internal.AxisError:axisa:axis -1 is out of bounds for array of dimension 0

有谁知道出了什么问题?非常感谢!

【问题讨论】:

    标签: python arrays dimension


    【解决方案1】:

    np.cross(u, v) 返回两个向量的叉积。在您的情况下,uv 不是向量,而是维度为 0 的标量。这是因为您有 u = p0 - p3 其中 p0p3 是数组的 jth 元素(@987654328 @)。

    要验证,您可以打印 uv 并检查它们是标量还是一维数组(向量)。

    【讨论】:

    • 非常感谢!我想我明白你的答案了。我在 for 循环中用 p0a 替换了 p0,用 p1a 替换了 p1,它现在可以工作了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多