使用numpy的简单函数不会运行

2024-05-07 07:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了两个多小时了。每一行打印出我想要的结果。但是,当我运行程序中的所有行时,python会打印值或Ixx、Iyy和Ixy。为什么会这样?你知道吗

import numpy as np

Ixx = 14600000
Iyy = 14600000
Ixy = 7080*(47.2-12.5)**2
alpha = 45

x = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)+Ixy*np.sin(2*alpha/180*np.pi)
y = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)-Ixy*np.sin(2*alpha/180*np.pi)
z = 0.5*(Ixx-Iyy)*np.sin(2*alpha/180*np.pi)+Ixy*np.cos(2*alpha/180*np.pi)

print x,y,z

Tags: import程序alphanumpyasnppisin
2条回答

如果您在python2.x下运行这个程序,那么您将丢失2*alpha/180*np.pi语句的信息(尽管python3.x应该可以工作)。你知道吗

这些操作按优先顺序(在本例中是从左到右)进行计算,从而

((2 * alpha) / 180) * ni.pi
=> (90 / 180) * ni.pi # integer division truncates this to 0
=> 0 * ni.pi

您需要手动转换为浮点数:

np.sin(2.0*alpha/180*np.pi) # the floating point 2.0 will promote alpha to float for the multiply

或者

np.sin(2*float(alpha)/180*np.pi) # explicit, very clear

或者

alpha = 45.0 # this is a little dangerous as you might change the angle in the future and forget to make it a float again

我不能说我明白为什么,但改变我的窦和余弦项的内部解决了问题。我变了

x = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)+Ixy*np.sin(2*alpha/180*np.pi)
y = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(2*alpha/180*np.pi)-Ixy*np.sin(2*alpha/180*np.pi)
z = 0.5*(Ixx-Iyy)*np.sin(2*alpha/180*np.pi)+Ixy*np.cos(2*alpha/180*np.pi)

Ixx_a = 0.5*(Ixx+Iyy)+0.5*(Ixx-Iyy)*np.cos(np.pi*alpha/90) + Ixy*np.sin(np.pi*alpha/90)
Iyy_a = 0.5*(Ixx+Iyy)-0.5*(Ixx-Iyy)*np.cos(np.pi*alpha/90) - Ixy*np.sin(np.pi*alpha/90)
Ixy_a = 0.5*(Ixx-Iyy)*np.sin(np.pi*alpha/90)+Ixy*np.cos(np.pi*alpha/90)

这在数学上是等价的,但显然numpy发现它更容易计算。你知道吗

相关问题 更多 >