비닝 당신은 시간의 미리 원하는 빈의 폭을 알고 있다면
을 (큰 데이터 세트; 고정 폭 쓰레기통 데이터를 플로트) - 버킷의 수백 또는 수천이있는 경우에도 - 그러면 자신의 솔루션을 선전하는 것이 빠를 것이라고 생각합니다 (작성하고 실행하는 것 모두). 다음은 당신에게 파일에서 다음 값 제공하는 반복자 있다고 가정합니다 일부 파이썬의 :
from math import floor
binwidth = 20
counts = dict()
filename = "mydata.csv"
for val in next_value_from_file(filename):
binname = int(floor(val/binwidth)*binwidth)
if binname not in counts:
counts[binname] = 0
counts[binname] += 1
print counts
값은 수레가 될 수는 있지만, 이것은 당신이 정수 binwidth를 사용하는 가정입니다; 일부 float 값의 binwidth를 사용하려면이 설정을 약간 조정해야 할 수도 있습니다.
앞서 언급했듯이 iter() 메서드를 사용하여 사용자 지정 생성기 또는 개체를 작성하여이 작업을 효율적으로 수행 할 수 있습니다.이러한 발전기의 의사는이 될 것이다 : 주어진 라인이 여러 개의 값이있는 경우
def next_value_from_file(filename):
f = open(filename)
for line in f:
# parse out from the line the value or values you need
val = parse_the_value_from_the_line(line)
yield val
, 다음 parse_the_value_from_the_line()
을하거나 목록을 반환하거나 자체 발전기, 그리고이 의사 사용
def next_value_from_file(filename):
f = open(filename)
for line in f:
for val in parse_the_values_from_the_line(line):
yield val
좋은 해결책. 좀 더 빠르게하고 싶다면'myhist + = htemp'를 할 수 있습니다 (히스토그램을 제자리에 업데이트하기 때문에 더 빠름). – EOL
감사합니다. @ EOL. 옥타브에서 완전히 전환하지 않았기 때문에 좋은 파이썬 기능을 잊어 버렸습니다. 그리고 아직 배워야 할 발전기와 같은 고급 기능이 있습니다. – mtrw