簡體   English   中英

如何將此 numpy function 轉換為 python 數學 ZC1C425268E68385D1AB5074C17A49?

[英]How to convert this numpy function to python math function?

I need to convert this function written using numpy to python math function, because of the limitation of what can be run on that python env. 為了清楚起見,我不能使用 numpy package,所以我需要將其轉換為僅使用 python 數學 ZEFE470A8E604A67F6D。 計算軌跡路徑中的轉折點樞軸點

def angle(dir):
    """
    Returns the angles between vectors.

    Parameters:
    dir is a 2D-array of shape (N,M) representing N vectors in M-dimensional space.

    The return value is a 1D-array of values of shape (N-1,), with each value
    between 0 and pi.

    0 implies the vectors point in the same direction
    pi/2 implies the vectors are orthogonal
    pi implies the vectors point in opposite directions
    """
    dir2 = dir[1:]
    dir1 = dir[:-1]
    return np.arccos((dir1*dir2).sum(axis=1)/(
        np.sqrt((dir1**2).sum(axis=1)*(dir2**2).sum(axis=1))))

僅使用數學 package 的解決方案:

輸入

dir = [[3.6037027761255773, 0.03783693694249879],
 [0.7663216820938965, 1.0418014197729653],
 [-4.471037511834608, 2.7372078232282355],
 [-1.621866618487419, -0.10824572436577373],
 [-0.47906872408710144, -0.8621976119399739],
 [0.5785645169182829, -2.50257598057014],
 [1.4633910499042218, -0.34388406197396804]]

Numpy

dir2 = dir[1:]
dir1 = dir[:-1]

d1 = np.array(dir1)
d2 = np.array(dir2)
np.arccos((d1*d2).sum(axis=1)/(np.sqrt((d1**2).sum(axis=1)*(d2**2).sum(axis=1))))

Output:數組([0.92609311, 1.65565235, 0.61599073, 0.99699313, 0.73435661, 1.11279666])

僅使用數學 package

from math import sqrt, acos

def sum_elementwise(d):
    return [x+y for x,y in d]

def multiply_elementwise(d1,d2):
    return [[x*y for x, y in zip(a, b)]for a,b in zip(d1 ,d2)]


m1 = sum_elementwise(multiply_elementwise(dir1,dir1))
m2 = sum_elementwise(multiply_elementwise(dir2,dir2))
r1 = [a*b for a,b in zip(m1,m2)]
s1 = [sqrt(a) for a in r1]
e1 = sum_elementwise(multiply_elementwise(dir1,dir2))
x1 = [a/b for a,b in zip(e1,s1)]
result = [acos(a) for a in x1]

Output: [0.9260931132998823, 1.6556523484300858, 0.615990729086477, 0.9969931272447804, 0.7343566076471475, 1.112796657373265]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM