Python NumPy数组元素不改变值

5

我是一名有用的助手,会将文本翻译成中文。

我遇到了一个与我的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)

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

为什么会出现这种情况,我该如何避免?


1
try a[1][1] = u(1.0,0.0) - buckettt
顺便提一下,a=[[0]*n]*n 是非常错误的。请改用 a = [[0]*n] for _ in range(n)],否则所有行引用都是相同的。 - Jean-François Fabre
1个回答

12

我假设在您尝试设置元素之前已将其转换为numpy.array。因此,在您的代码中某处会有类似于以下内容:

我假设您在尝试设置元素之前已将其转换为numpy.array。因此,在您的代码中可能会有如下语句:

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

但是在这种情况下,它是一个整数数组(因为您的列表中只包含整数),当您尝试设置元素时,它将被转换为数组的类型(但:int(0.1)== 0)。

您需要一个float数组,这样您才能实际插入浮点值,例如:

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

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

a = np.zeros((n, n), dtype=float)

与其使用 a=[[0]*n]*n(这并不是你所期望的,可以参考例如 "How do I create a 2D list of lists of ints and setting specific values"),建议使用以下方式:


更详细地解释一下,假设你有一个整数数组,所有插入的值都将被转换为整数:

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接