繁体   English   中英

如何解决 numpy.arange 无法正常工作的问题?

[英]How can I fix the problem that numpy.arange is not working properly?

我正在尝试通过两个输入参数使用numpy.arange创建两个列表,并且我想将它们传递到一个数组中,该数组通过np.zeros初始化为 3x3 矩阵。 问题是通行证仅适用于 0.1,我看不出我做错了什么。 我的代码:

import numpy as np
from time import sleep

def Stabilizer(px,pz):
    ss = 0.05
    #initialize an array for data aquisition: 1st row is for countrate, 2nd and 3rd row for x and z values in V
    values_x = np.zeros((3,3), dtype=float)
    values_z = np.zeros((3,3), dtype=float)
    sleep(5)
    values_x[2] = pz
    values_z[1] = px
    x_range = np.arange(px-ss, px+ss,ss)
    z_range = np.arange(pz-ss, pz+ss,ss)
    print(x_range)
    print(z_range)
    values_x[1] = x_range
    values_z[2] = z_range
    for i,x_value in enumerate(x_range):
        #change_pos(x_channel, x_value)
        sleep(1)
        start = 1000
        stop = 1+i
        countrate = stop - start
        values_x[0,i] = countrate
        print(x_value)
    print(values_x)

Stabilizer(0.1,0.2)

在控制台上创建此 output :

Traceback (most recent call last):
  File "C:/Users/x/PycharmProjects/NV_centre/test.py", line 46, in <module>
    Stabilizer(0.1,0.2)
  File "C:/Users/x/PycharmProjects/NV_centre/test.py", line 35, in Stabilizer
    values_z[2] = z_range
ValueError: could not broadcast input array from shape (2) into shape (3)
[0.05 0.1  0.15]
[0.15 0.2 ]

理论上,function np.arange(px-ss, px+ss,ss)使用 output [0.05 0.1] 创建一个列表。 当我在理论上使用np.arange(px-ss, px+2*ss,ss)时,output 将是 [0.05 0.1 0.15] 但它是 [0.05 0.1 0.15 0.2]。 对于z_range = np.arange(pz-ss, pz+2*ss,ss) , output 是 [0.15 0.2 0.25] 这是正确的。 我不明白为什么会出现差异,因为两个列表都是以相同的方式创建的。

当使用非 integer 步骤(您使用了 0.05)时,numpy.arange 的结果不一致。 改用 numpy.linspace 会得到更一致的结果。

参考: https://numpy.org/doc/stable/reference/generated/numpy.arange.html

np.arange()不适用于浮点数,因为浮点运算存在舍入误差。 有关更多详细信息,请参阅此。

在这种情况下最好使用np.linspace() 因此,将以下行更改为:

x_range = np.linspace(px-ss, px+ss,3)
z_range = np.linspace(pz-ss, pz+ss,3)

这将正常工作。

这是我能想到的最佳解决方案:

x_range = [round(i, 2) for i in np.arange(px-ss, px+2*ss,ss) if i<px+2*ss]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM