<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mscneuro.neuro.uni-bremen.de/index.php?action=history&amp;feed=atom&amp;title=Beyond_normal_np.save</id>
	<title>Beyond normal np.save - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mscneuro.neuro.uni-bremen.de/index.php?action=history&amp;feed=atom&amp;title=Beyond_normal_np.save"/>
	<link rel="alternate" type="text/html" href="https://mscneuro.neuro.uni-bremen.de/index.php?title=Beyond_normal_np.save&amp;action=history"/>
	<updated>2026-04-19T10:38:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://mscneuro.neuro.uni-bremen.de/index.php?title=Beyond_normal_np.save&amp;diff=383&amp;oldid=prev</id>
		<title>Davrot at 16:52, 17 October 2025</title>
		<link rel="alternate" type="text/html" href="https://mscneuro.neuro.uni-bremen.de/index.php?title=Beyond_normal_np.save&amp;diff=383&amp;oldid=prev"/>
		<updated>2025-10-17T16:52:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:52, 17 October 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== The goal ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Let’s [https://numpy.org/doc/stable/reference/routines.io.html save and load data under numpy]. This can be more complicated than expected.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Let’s [https://numpy.org/doc/stable/reference/routines.io.html save and load data under numpy]. This can be more complicated than expected.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Davrot</name></author>
	</entry>
	<entry>
		<id>https://mscneuro.neuro.uni-bremen.de/index.php?title=Beyond_normal_np.save&amp;diff=233&amp;oldid=prev</id>
		<title>Davrot: Created page with &quot;== The goal == Let’s [https://numpy.org/doc/stable/reference/routines.io.html save and load data under numpy]. This can be more complicated than expected.  Questions to [mailto:davrot@uni-bremen.de David Rotermund]  == Normal [https://numpy.org/doc/stable/reference/generated/numpy.save.html np.save] and [https://numpy.org/doc/stable/reference/generated/numpy.load.html np.load] == A normal np.save and np.load cycle may look like this:&lt;syntaxhighlight lang=&quot;python&quot;&gt;impor...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mscneuro.neuro.uni-bremen.de/index.php?title=Beyond_normal_np.save&amp;diff=233&amp;oldid=prev"/>
		<updated>2025-10-17T13:40:47Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== The goal == Let’s [https://numpy.org/doc/stable/reference/routines.io.html save and load data under numpy]. This can be more complicated than expected.  Questions to [mailto:davrot@uni-bremen.de David Rotermund]  == Normal [https://numpy.org/doc/stable/reference/generated/numpy.save.html np.save] and [https://numpy.org/doc/stable/reference/generated/numpy.load.html np.load] == A normal np.save and np.load cycle may look like this:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;impor...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== The goal ==&lt;br /&gt;
Let’s [https://numpy.org/doc/stable/reference/routines.io.html save and load data under numpy]. This can be more complicated than expected.&lt;br /&gt;
&lt;br /&gt;
Questions to [mailto:davrot@uni-bremen.de David Rotermund]&lt;br /&gt;
&lt;br /&gt;
== Normal [https://numpy.org/doc/stable/reference/generated/numpy.save.html np.save] and [https://numpy.org/doc/stable/reference/generated/numpy.load.html np.load] ==&lt;br /&gt;
A normal np.save and np.load cycle may look like this:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original: np.ndarray = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
np.save(&amp;quot;a.npy&amp;quot;, a_original)&lt;br /&gt;
a_load: np.ndarray = np.load(&amp;quot;a.npy&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(np.abs(a_original - a_load).sum()) # -&amp;gt; 0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Saving non-standard numpy data ==&lt;br /&gt;
You may have tried this and wondered why it doesn’t work&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original: list = []&lt;br /&gt;
a_original.append(rng.random((100, 10)))&lt;br /&gt;
a_original.append(rng.random((100, 10)))&lt;br /&gt;
a_original.append(&amp;quot;now something completely different&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
np.save(&amp;quot;b.npy&amp;quot;, a_original)&lt;br /&gt;
a_load: np.ndarray = np.load(&amp;quot;b.npy&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;---------------------------------------------------------------------------&lt;br /&gt;
ValueError                                Traceback (most recent call last)&lt;br /&gt;
/data_1/davrot/MRI_Fruits/test/test.py in line 12&lt;br /&gt;
      26 a_original.append(&amp;quot;now something completely different&amp;quot;)&lt;br /&gt;
     28 np.save(&amp;quot;b.npy&amp;quot;, a_original)&lt;br /&gt;
---&amp;gt; 29 a_load: np.ndarray = np.load(&amp;quot;b.npy&amp;quot;)&lt;br /&gt;
[...]&amp;lt;/syntaxhighlight&amp;gt;This is how you have to do it:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original: list = []&lt;br /&gt;
a_original.append(rng.random((100, 10)))&lt;br /&gt;
a_original.append(rng.random((100, 10)))&lt;br /&gt;
a_original.append(&amp;quot;now something completely different&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
np.save(&amp;quot;b.npy&amp;quot;, np.array(a_original, dtype=object))&lt;br /&gt;
a_load: np.ndarray = np.load(&amp;quot;b.npy&amp;quot;, allow_pickle=True)&lt;br /&gt;
&lt;br /&gt;
print(np.abs(a_original[0] - a_load[0]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(np.abs(a_original[1] - a_load[1]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(a_load[2])  # -&amp;gt; now something completely different&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [https://numpy.org/doc/stable/reference/generated/numpy.savez.html np.savez] ==&lt;br /&gt;
We can save more than one variable into one file. We need to use np.savez for this. Now the file extension is npz instead of npy. This is required! &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original = rng.random((100, 10))&lt;br /&gt;
b_original = rng.random((100, 10))&lt;br /&gt;
c_original = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
np.savez(&amp;quot;c.npz&amp;quot;, a_original=a_original, b_original=b_original, c_original=c_original)&lt;br /&gt;
&lt;br /&gt;
np_file = np.load(&amp;quot;c.npz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
np_file_keys: list = list(np_file.keys())&lt;br /&gt;
print(np_file_keys) # -&amp;gt; [&amp;#039;a_original&amp;#039;, &amp;#039;b_original&amp;#039;, &amp;#039;c_original&amp;#039;]&amp;lt;/syntaxhighlight&amp;gt;Please don’t use savez like this because this can cause human errors down the road:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original = rng.random((100, 10))&lt;br /&gt;
b_original = rng.random((100, 10))&lt;br /&gt;
c_original = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
# np.savez(&amp;quot;c.npz&amp;quot;, a_original=a_original, b_original=b_original, c_original=c_original)&lt;br /&gt;
np.savez(&amp;quot;d.npz&amp;quot;, a_original, b_original, c_original)&lt;br /&gt;
&lt;br /&gt;
np_file = np.load(&amp;quot;d.npz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
np_file_keys: list = list(np_file.keys())&lt;br /&gt;
print(np_file_keys) # -&amp;gt; [&amp;#039;arr_0&amp;#039;, &amp;#039;arr_1&amp;#039;, &amp;#039;arr_2&amp;#039;]&amp;lt;/syntaxhighlight&amp;gt;You don’t need to keep the variable name but keep it human readable:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original = rng.random((100, 10))&lt;br /&gt;
b_original = rng.random((100, 10))&lt;br /&gt;
c_original = rng.random((100, 10))&lt;br /&gt;
d_original = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
np.savez(&amp;quot;e.npz&amp;quot;, what=a_original, a=b_original, nice=c_original, day=d_original)&lt;br /&gt;
&lt;br /&gt;
np_file = np.load(&amp;quot;e.npz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
np_file_keys: list = list(np_file.keys())&lt;br /&gt;
print(np_file_keys) # -&amp;gt; [&amp;#039;what&amp;#039;, &amp;#039;a&amp;#039;, &amp;#039;nice&amp;#039;, &amp;#039;day&amp;#039;]&amp;lt;/syntaxhighlight&amp;gt;Now we can work with the file and the stored variables: &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original = rng.random((100, 10))&lt;br /&gt;
b_original = rng.random((100, 10))&lt;br /&gt;
c_original = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
np.savez(&amp;quot;c.npz&amp;quot;, a_original=a_original, b_original=b_original, c_original=c_original)&lt;br /&gt;
&lt;br /&gt;
np_file = np.load(&amp;quot;c.npz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(np.abs(a_original - np_file[&amp;quot;a_original&amp;quot;]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(np.abs(b_original - np_file[&amp;quot;b_original&amp;quot;]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(np.abs(c_original - np_file[&amp;quot;c_original&amp;quot;]).sum())  # -&amp;gt; 0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [https://numpy.org/doc/stable/reference/generated/numpy.savez_compressed.html np.savez_compressed] ==&lt;br /&gt;
We can compress the data too:&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
&lt;br /&gt;
rng = np.random.default_rng()&lt;br /&gt;
&lt;br /&gt;
a_original = rng.random((100, 10))&lt;br /&gt;
b_original = rng.random((100, 10))&lt;br /&gt;
c_original = rng.random((100, 10))&lt;br /&gt;
&lt;br /&gt;
np.savez_compressed(&lt;br /&gt;
    &amp;quot;f.npz&amp;quot;, a_original=a_original, b_original=b_original, c_original=c_original&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
np_file = np.load(&amp;quot;f.npz&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(np.abs(a_original - np_file[&amp;quot;a_original&amp;quot;]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(np.abs(b_original - np_file[&amp;quot;b_original&amp;quot;]).sum())  # -&amp;gt; 0.0&lt;br /&gt;
print(np.abs(c_original - np_file[&amp;quot;c_original&amp;quot;]).sum())  # -&amp;gt; 0.0&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davrot</name></author>
	</entry>
</feed>