将numpy数组值设置为更精确

2024-04-29 19:12:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组,它有值,如果精确计算的话:[3.056565 3.924560],但是在python中它打印四舍五入的数字,数组是[3.06,3.93]。数组是用来计算其他内容的,结果与预期不同。我怎样才能使数组停止舍入呢

下面是您可以看到数组没有精确计算的代码:

import datetime
import math
import numpy as np

def numGradient(f, x, h):


  n = len(x)
  g = [0]*n
  g = np.array(g)

  for i in range(n):
    e = [0]*n
    e[i] = 1
    e=np.array(e)


    g[i] = (f(x+e*h)-f(x-e*h))//(2*h)

  return(g)

def myFun(x) :
    return ( 0.6 + ((math.sin(x[0]**2-x[1]**2))**2-0.5)/((1+0.001*(x[0]**2+x[1]**2))**2) )
x_old=(3,4)

xthis = x_old - 0.01*numGradient(myFun, x_old, 10**(-6))

print(xthis)

Tags: 代码import内容returndefnp数字math
1条回答
网友
1楼 · 发布于 2024-04-29 19:12:56

你的代码有几个问题。它可能不会计算出你所期望的

首先,这是初始化NumPy数组的错误方法

  g = [0]*n
  g = np.array(g)

替换为

  g = np.zeros(n)

第二,对e执行相同的操作

for i in range(n):
    e = np.zeros(n)
    e[i] = 1

最重要的是

g[i] = (f(x+e*h)-f(x-e*h))//(2*h)

g[i] = (f(x+e*h)-f(x-e*h))/(2*h)

这毕竟是浮点除法。而//是python3中所谓的整数除法

更改后,您将获得

[ 3.056565  3.92456 ]

这可能是你应该得到的

以下是更改后的完整代码:

import datetime
import math
import numpy as np

def numGradient(f, x, h):


  n = len(x)
  g = np.zeros(n)

  for i in range(n):
    e = np.zeros(n)
    e[i] = 1
    g[i] = (f(x+e*h)-f(x-e*h))/(2*h)

  return(g)

def myFun(x) :
    return ( 0.6 + 
       ((math.sin(x[0]**2-x[1]**2))**2-0.5)/((1+0.001*(x[0]**2+x[1]**2))**2) )


x_old=(3,4)

np.set_printoptions(precision=6)

xthis = x_old - 0.01*numGradient(myFun, x_old, 10**(-6))

print(xthis)

相关问题 更多 >