Python numpy数组元素不会改变值

时间:2017-06-12 13:33:41

标签: python arrays numpy pointers

所以我在我的python代码中遇到了一个问题,我将其归结为:

假设我们有一个函数u

def u(y,t):
    h = float(10) 
    U0 = float(1)
    return U0/h*(y)

一个数组:

a=np.array([[0]*2]*2)

然后执行以下操作:

a[1][1] = u(1,0)

a[1][1]返回0,尽管u(1,0)等于0.1

为什么会发生这种情况?我该如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

我假设您在尝试设置元素之前实际将其转换为numpy.array。所以你的代码中有这样的东西:

import numpy as np
a = np.array(a)

但在这种情况下,它是一个整数数组(因为你的列表列表只包含整数),当你尝试设置一个元素时,它将被强制转换为数组的类型(但是:{{1} })。

您需要一个int(0.1) == 0数组,以便实际插入浮点值,例如:

float

请注意,您也可以使用以下命令创建该数组:

a = np.array(a, dtype=float)

而不是a = np.zeros((n, n), dtype=float) (这并不是您所期望的,请参阅"How do I create a 2D list of lists of ints and setting specific values"。)

为了更详细地解释这一点,假设您有这个整数数组,所有插入的值都将转换为整数:

a=[[0]*n]*n

但是如果你有一个浮点数组,你可以插入浮点值:

>>> a = np.array([0, 0, 0])
>>> a[0] = 0.5
>>> a[1] = 1.5
>>> a
array([0, 1, 0])