python - 为什么 python 2.6 不更新我的 numpy 数组?

标签 python arrays numpy copy

我有一个名为 get_gradient 的简单函数,它采用 [[x,y,Vx,Vy]] 的 numpy 数组并返回(应该返回)[[Vx,Vy,Ax,Ay]] 的数组。我想将我的 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

最佳答案

不是 k 没有改变,而是它有一个整数数据类型,所以当你试图给它分配一个 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.]])

相反;它默认为 float dtype。

关于python - 为什么 python 2.6 不更新我的 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433058/

相关文章:

python - 如何初始化具有给定维数的空 Numpy 数组?

c - 尝试创建一个简单的 "Debugger"(一个简单的 C 程序)

python - Python 中具有多个参数的方法的多重处理

python - 将索引转换为列 - pandas

python - JSON 模式属性的范围比预期更广

java - 自定义对象上的流过滤器多维数组给定范围

python - 在不到一秒的时间内获取巨大矩阵的范数 : NUMPY, PYTHON

python - 为什么 numpy.linalg.solve() 提供比 numpy.linalg.inv() 更精确的矩阵求逆?

python - Pycharm - 在 Django 控制台中自动加载模型

python - 如何实现高斯分布的概率密度函数