Python numpy 数组元素不改变值

2024-01-12

所以我的 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)

But a[1][1]回报0尽管u(1,0)等于0.1.

为什么会发生这种情况以及如何避免这种情况?


我假设你实际上将其转换为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(这并不完全符合您的预期,请参阅例如“如何创建整数列表的二维列表并设置特定值” https://stackoverflow.com/a/44467782/5393381.)


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

>>> 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. ])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python numpy 数组元素不改变值 的相关文章

随机推荐