在for循环中使用Python的NumPy linspace
我正在尝试在一个循环中使用linspace。我想要在0到10之间每隔0.5取一个数。看起来z_bin这个部分运行得很好。
我的问题是:我该如何在这个循环中正确使用linspace,来替代旁边注释里提到的range函数?当我从处理整数转到处理小数时,我需要在循环中做哪些更改呢?
z_bin = numpy.linspace (0.0,10.0,num=21)
print 'z_bin: ', z_bin
num = len(z_bin)
grb_binned_data = []
for i in numpy.linspace(len(z_bin)-1): #range(len(z_bin)-1):
zmin = z_bin[i]
zmax = z_bin[i+1]
grb_z_bin_data = []
for grb_row in grb_data:
grb_name = grb_row[0]
ra = grb_row[1]
dec = grb_row[2]
z = float(grb_row[3])
if z > zmin and z <= zmax:
grb_z_bin_data.append(grb_row)
grb_binned_data.append(grb_z_bin_data)
2 个回答
2
有一个更简单的方法可以做到这一点,那就是使用zip函数:
z_bin = numpy.linspace(0.0, 10.0, 21)
for z_min, z_max in zip(z_bin[:-1], z_bin[1:]):
print z_min, z_max
6
你不应该用linspace的输出去索引一个数组!因为linspace生成的是小数,而数组索引需要用整数。
从你的代码来看,你真正想要的可能是这样的:
z_bin = numpy.linspace(0.0, 10.0, 21)
for i in range(len(z_bin)-1):
zmin = z_bin[i]
zmax = z_bin[i+1]
# do some things with zmin/zmax
zmin
和zmax
仍然会是小数(带小数点的数字)。