gpt4 book ai didi

python - 创建围绕零镜像的数字列表(python)

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:46 25 4
gpt4 key购买 nike

我认为这应该是一个简单的问题......但它已经让我犹豫了一段时间:(

我希望根据指定最大值和增量的输入创建一个以零为中心(可以说是)的数字列表。所以,

max = 100
increment = 1

会回来

[-100,-99,-98,...,-1,0,1,...,99,100]

max = 35
increment = 0.2

会回来

[-35.0,-34.8,...,-0.2,0,0.2,...34.8,35.0]

如果增量没有整齐地划分为最大值,则需要进行最后一步(例如,如果以 0.3 为增量计数到 1,它将运行 [-1.0,-0.6,-0.3,0.0 ,0.3,0.6,0.9,1.0]

list(numpy.linspace()) 似乎是要走的路,但我似乎对如何以最简单的方式描述的方式进行这项工作有一个完整的心理障碍个案。

感谢建议!

编辑:我自己的解决方案是

def mylist(stop,step):
a = list(np.arange(0,-stop,-step))+[-stop]
a.reverse()
b = list(a)
c = list(np.arange(0,stop,step))+[stop]
d = b+c
d.remove(0)
e = list(d)
return e

这太笨重了,连我都看得出来。

最佳答案是:

def mirrored(maxval, inc):
x = np.arange(inc, maxval, inc)
if x[-1] != maxval:
x = np.r_[x, maxval]
return np.r_[-x[::-1], 0, x]

但我将不得不更多地使用 google 来理解为什么这样有效(也不确定我是否要四舍五入...增量的输入可能被合法地指定为超过一位小数)

最佳答案

如果您希望它围绕 0 严格镜像(即始终包含 0 和端点,并且关于 0 完全对称),您需要几个步骤。

首先,请注意上面@NPE 的评论。 float 学与十进制数学不同!!这看似无关紧要,但在某些情况下它咬你一口。

有不止一种方法可以做到这一点。你想让所有的数字均匀分布,还是坚持增量,只在端点违反它?这种方法采用了两者中的后者。

import numpy as np

def mirrored(maxval, inc=1):
x = np.arange(inc, maxval, inc)
if x[-1] != maxval:
x = np.r_[x, maxval]
return np.r_[-x[::-1], 0, x]

print mirrored(1, 0.3)

这会产生:

[-1.  -0.9 -0.6 -0.3  0.   0.3  0.6  0.9  1. ]

如果您希望所有数字均匀分布(但不是您指定的精确增量),只需使用 linspace:

import numpy as np

def mirrored2(maxval, inc=1):
return np.linspace(-maxval, maxval, 2*maxval // inc)

print mirrored2(1, 0.3)

这会产生:

[-1.  -0.6 -0.2  0.2  0.6  1. ]

关于python - 创建围绕零镜像的数字列表(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com