Skip to content

Commit f80601b

Browse files
authored
Merge pull request sgkit-dev#12 from eric-czech/pre_allocate_res
Preallocate result arrays and apply earlier slicing
2 parents 219572f + c88c8e5 commit f80601b

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

sgkit_bgen/bgen_reader.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,14 @@ def __getitem__(self, idx):
130130
all_vaddr.extend(vaddr[start_offset:end_offset])
131131

132132
with bgen_file(self.path) as bgen:
133-
genotypes = [bgen.read_genotype(vaddr) for vaddr in all_vaddr]
134-
all_probs = [genotype["probs"] for genotype in genotypes]
135-
d = [_to_dosage(probs) for probs in all_probs]
136-
return np.stack(d)[:, idx[1]]
133+
res = None
134+
for i, vaddr in enumerate(all_vaddr):
135+
probs = bgen.read_genotype(vaddr)["probs"][idx[1]]
136+
dosage = _to_dosage(probs)
137+
if res is None:
138+
res = np.zeros((len(all_vaddr), len(dosage)), dtype=self.dtype)
139+
res[i] = dosage
140+
return res
137141

138142

139143
def _to_dosage(probs: ArrayLike):

0 commit comments

Comments
 (0)