3

[[x、y、Vx、Vy]] の numpy 配列を取り、[[Vx、Vy、Ax、Ay]] の配列を返す (返す必要がある) get_gradient という単純な関数があります。k[0][0:2] を state[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
4

1 に答える 1

4

k が変更されていないのではなく、整数の dtype を持っているため、float を割り当てようとすると、期待どおりにならない可能性があります。

>>> 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.]])

代わりは; デフォルトはfloatdtype です。

于 2012-11-17T18:44:58.840 に答える