فهرست منبع

Merge branch 'nix-quirks' of INCF-workshop-2021/NIX-Neo-workshop into master

Thank you!
Jan Grewe 2 سال پیش
والد
کامیت
17c3850db1
3فایلهای تغییر یافته به همراه3671 افزوده شده و 1 حذف شده
  1. 1 1
      .gitignore
  2. 3579 0
      nix-quirks/NIXPy quirks.ipynb
  3. 91 0
      nix-quirks/scr.py

+ 1 - 1
.gitignore

@@ -1,4 +1,4 @@
-.ipynb_checkpoints
+**/.ipynb_checkpoints
 old_material/*
 day_3/my_first_neo_dataset.nix
 day_3/l101210-001*

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 3579 - 0
nix-quirks/NIXPy quirks.ipynb


+ 91 - 0
nix-quirks/scr.py

@@ -0,0 +1,91 @@
+import os
+import time
+import numpy as np
+import nixio as nix
+import matplotlib.pyplot as plt
+
+from tempfile import TemporaryDirectory
+from typing import List, Tuple
+
+
+def create_file(nixfile: nix.File) -> List[int]:
+    times = []
+    blk = nixfile.create_block("benchmark", "block")
+    grp = blk.create_group("benchmark", "group")
+    for idx in range(200):
+        da = blk.create_data_array(name=str(idx), array_type="array", data=[0])
+        t0 = time.time()
+        grp.data_arrays.append(da)
+        times.append(time.time() - t0)
+    return times
+
+
+def benchmark_retrieve_actual(nixfile: nix.File) -> Tuple[List[int], List[int], List[int]]:
+    create_file(nixfile)
+    by_name = []
+    by_id = []
+    by_idx = []
+    blk = nixfile.blocks[0]
+    for idx, da in enumerate(blk.data_arrays):
+        t0 = time.time()
+        blk.data_arrays[da.name]
+        by_name.append(time.time() - t0)
+
+        t0 = time.time()
+        blk.data_arrays[da.id]
+        by_id.append(time.time() - t0)
+
+        t0 = time.time()
+        blk.data_arrays[idx]
+        by_idx.append(time.time() - t0)
+    return by_name, by_id, by_idx
+
+
+def benchmark_retrieve_link(nixfile: nix.File) -> Tuple[List[int], List[int], List[int]]:
+    create_file(nixfile)
+    by_name = []
+    by_id = []
+    by_idx = []
+    blk = nixfile.blocks[0]
+    grp = blk.groups[0]
+    for idx, da in enumerate(grp.data_arrays):
+        t0 = time.time()
+        grp.data_arrays[da.name]
+        by_name.append(time.time() - t0)
+
+        t0 = time.time()
+        grp.data_arrays[da.id]
+        by_id.append(time.time() - t0)
+
+        t0 = time.time()
+        grp.data_arrays[idx]
+        by_idx.append(time.time() - t0)
+    return by_name, by_id, by_idx
+
+
+def main():
+    with TemporaryDirectory() as tmpdir:
+        with nix.File(os.path.join(tmpdir, "retrieve"), nix.FileMode.Overwrite) as nixfile:
+            by_name, by_id, by_idx = benchmark_retrieve_actual(nixfile)
+            plt.figure("Retrieval times from block.data_arrays")
+            plt.plot(by_name, ".", label="by name")
+            plt.plot(by_id, ".", label="by ID")
+            plt.plot(by_idx, ".", label="by index")
+            plt.legend()
+            plt.xlabel("Item index")
+            plt.ylabel("Time (s)")
+
+    with TemporaryDirectory() as tmpdir:
+        with nix.File(os.path.join(tmpdir, "link-retrieve"), nix.FileMode.Overwrite) as nixfile:
+            by_name, by_id, by_idx = benchmark_retrieve_link(nixfile)
+            plt.figure("Retrieval times from group.data_arrays")
+            plt.plot(by_name, ".", label="by name")
+            plt.plot(by_id, ".", label="by ID")
+            plt.plot(by_idx, ".", label="by index")
+            plt.legend()
+            plt.xlabel("Item index")
+            plt.ylabel("Time (s)")
+    plt.show()
+
+if __name__ == "__main__":
+    main()