2014-07-22 2 views
1

for 루프에서 linspace를 사용하려고합니다. 0과 10 사이의 0.5 간격을 싶습니다. 그것은 z_bin 제대로 실행중인 것으로 나타납니다.for 루프에서 파이썬 numpy linspace를 사용하여

내 질문 : linspace를 올바르게 주석 줄에 표시된 범위 함수 대신 for 루프에서 사용할 수 있습니까? 정수 작업에서 소수점 작업으로 이동하면서 루프에서 무엇을 변경해야합니까?

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) 

답변

3

배열의 색인을 생성하기 위해 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 

zminzmax 여전히 점 (10 진수) 숫자를 부동됩니다 : 당신이 정말 원하는과 같은 코드에서

이 같은 것입니다.

+0

dshepard : 우수한을! 응답 해주셔서 감사합니다. 유익하고 명확한, 정말 고마워요 – CuriousGeorge119

+1

이런 종류의 사용에주의하십시오. 나열된 경우에도 작동하지만 끝점을 포함하는지 여부는 부동 소수점 올림에 따라 다릅니다. 예를 들어 numpy.arange (0.0, 20.0, 2.0/3.0)는 numpy.linspace (0.0, 20.0, 31)와 같은 대답을 반환하지 않습니다. – Evan

+0

좋은 점은 실제로 문서에서 linspace가 비 필수 단계에 사용되어야한다고 말하면서 대답에서 변경하겠습니다. – dshepherd

0

압축 기능을 사용하는 것이 작업을 수행하는 쉬운 방법 :

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 
관련 문제