我有一个名为get_gradient的简单函数,它接受[[x,y,Vx,Vy]]的numpy数组并返回(应该返回)[[Vx,Vy,Ax,Ay]]数组。我想将我的k [0] [0:2]更新为等于[0] [2:4]状态,但是当我打印出来时,k永远不会改变值。我创建了一个初始数组的副本,希望它可以解决它,但它仍然不起作用!任何帮助将不胜感激
Y = numpy.array([[0, 0, 0, 0]]) # [x,y,Vx,Vy]
k = numpy.array([[0, 0, 0, 0]]) # [x,y,Vx,Vy]
def get_gradient(Y):
state = Y.copy()
spring_force = spring.force(state[0], feet_pos[0])
brownian_force = mass.brownian(dt)
drag_force = mass.drag(state[0][2:4])
total_force = spring_force + brownian_force + drag_force #2d array [Fx,Fy]
k[0][0:2] = state[0][2:4] ##### DOESN'T WORK!!!
k[0][2:4] = total_force/mass.mass ##### but this works :s
print k[0][0:2]
print state[0][2:4]
return k
答案 0 :(得分:4)
并不是k没有改变,而是它有一个整数dtype,所以当你尝试为它分配一个浮点数时,你可能得不到你期望的结果:
>>> k
array([[ 0, 0, 4863, 1464]])
>>> k.dtype
dtype('int64')
>>> k[0][0] = 10
>>> k
array([[ 10, 0, 4863, 1464]])
>>> k[0][0] = 1e-3
>>> k
array([[ 0, 0, 4863, 1464]])
或
>>> k
array([[ 0, 0, 4863, 1464]])
>>> k[0][0] = 10.2
>>> k
array([[ 10, 0, 4863, 1464]])
但:
>>> f = k.astype(float)
>>> f
array([[ 0., 0., 4863., 1464.]])
>>> f[0][0] = 1e-3
>>> f
array([[ 1.00000000e-03, 0.00000000e+00, 4.86300000e+03,
1.46400000e+03]])
请注意零后的.
。
我可能会用
>>> k = numpy.zeros((1,4))
>>> k
array([[ 0., 0., 0., 0.]])
代替;它默认为float
dtype。