<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blosc Home Page  (Posts about large-datasets)</title><link>https://blosc.org/</link><description></description><atom:link href="https://blosc.org/categories/large-datasets.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:blosc@blosc.org"&gt;The Blosc Developers&lt;/a&gt; </copyright><lastBuildDate>Fri, 08 May 2026 07:30:57 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Mastering Persistent, Dynamic Reductions and Lazy Expressions in Blosc2</title><link>https://blosc.org/posts/persistent-reductions/</link><dc:creator>Oumaima Ech Chdig, Francesc Alted</dc:creator><description>&lt;p&gt;Working with large volumes of data is challenging, but Blosc2 offers unique tools to facilitate processing.&lt;/p&gt;
&lt;p&gt;Blosc2 is a powerful data compression library designed to handle and process large datasets effectively. One standout feature is its support for &lt;strong&gt;lazy expressions&lt;/strong&gt; and &lt;strong&gt;persistent and dynamic reductions&lt;/strong&gt;. These tools make it possible to define complex calculations that execute only when necessary, reducing memory usage and optimizing processing time, which can be a game-changer when dealing with massive arrays.&lt;/p&gt;
&lt;p&gt;In this guide, we’ll break down how to use these features to streamline data manipulation and get better performance out of your workflows. We’ll also see how resizing operand arrays is automatically reflected in the results, highlighting the flexibility of lazy expressions.&lt;/p&gt;
&lt;section id="getting-started-with-arrays-and-broadcasting"&gt;
&lt;h2&gt;Getting Started with Arrays and Broadcasting&lt;/h2&gt;
&lt;p&gt;Blosc2 works smoothly with arrays of various shapes and dimensions, enabling users to perform calculations such as addition or multiplication across arrays of different sizes. This is where &lt;strong&gt;broadcasting&lt;/strong&gt; comes in. With broadcasting, Blosc2 automatically aligns the shapes of arrays for easy operations. This means you don’t need to manually adjust array dimensions to match, a huge time-saver when working with multidimensional data.&lt;/p&gt;
&lt;p&gt;For example, let’s suppose we have an array representing a large dataset and, &lt;cite&gt;a&lt;/cite&gt;, another representing a smaller dimension, &lt;cite&gt;c&lt;/cite&gt;.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_40d3da5d835a4d68a037ef7883ef1d31-1" name="rest_code_40d3da5d835a4d68a037ef7883ef1d31-1" href="https://blosc.org/posts/persistent-reductions/#rest_code_40d3da5d835a4d68a037ef7883ef1d31-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;fill_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_40d3da5d835a4d68a037ef7883ef1d31-2" name="rest_code_40d3da5d835a4d68a037ef7883ef1d31-2" href="https://blosc.org/posts/persistent-reductions/#rest_code_40d3da5d835a4d68a037ef7883ef1d31-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;int8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_40d3da5d835a4d68a037ef7883ef1d31-3" name="rest_code_40d3da5d835a4d68a037ef7883ef1d31-3" href="https://blosc.org/posts/persistent-reductions/#rest_code_40d3da5d835a4d68a037ef7883ef1d31-3"&gt;&lt;/a&gt;&lt;span class="n"&gt;expr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As seen above, broadcasting works automatically (and efficiently) with arrays of compressed data.  Also, the correct data type of the result will be inferred from the operands and the expression. Thanks to this mechanism, the interpreter automatically adjusts the dimensions and data types of the arrays involved in the operation, allowing calculations to be performed without the need for manual adjustments.&lt;/p&gt;
&lt;img alt="/images/blosc2-broadcast.png" src="https://blosc.org/images/blosc2-broadcast.png" style="width: 50%;"&gt;
&lt;p&gt;This approach is ideal for quick and simple data analysis, especially when working with large volumes of information that require frequent operations across different dimensions.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="setting-up-and-saving-lazy-expressions"&gt;
&lt;h2&gt;Setting Up and Saving Lazy Expressions&lt;/h2&gt;
&lt;p&gt;Imagine you need to perform a calculation like &lt;cite&gt;sum(a, axis=0) + b * sin(c)&lt;/cite&gt;. Rather than immediately calculating this, Blosc2’s &lt;strong&gt;lazy expression&lt;/strong&gt; feature lets you store the expression for later. By using &lt;cite&gt;blosc2.lazyexpr&lt;/cite&gt;, you define complex mathematical formulas and only trigger their execution when required, and only for the part of the resulting array that you are interested in. This is highly advantageous for large computations that might not be needed right away or that may depend on evolving data.&lt;/p&gt;
&lt;p&gt;Let's see how that works with a little more complex expression:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-1" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-1" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Create arrays with specific dimensions and values&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-2" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-2" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urlpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"a.b2nd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-3" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-3" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-3"&gt;&lt;/a&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urlpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"b.b2nd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-4" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-4" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-4"&gt;&lt;/a&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;full&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urlpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"c.b2nd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-5" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-5" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-5"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Define a lazy expression and the operands for later execution&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-6" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-6" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-6"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Note that we are using a string version of the expression here&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-7" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-7" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-7"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# so that it can be re-opened as-is later on&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-8" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-8" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-8"&gt;&lt;/a&gt;&lt;span class="n"&gt;expression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"sum(a, axis=0) + b * sin(c)"&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-9" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-9" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-9"&gt;&lt;/a&gt;&lt;span class="n"&gt;lazy_expression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lazyexpr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-10" name="rest_code_f1a369bf6d7c4816b0cb25d752fec00c-10" href="https://blosc.org/posts/persistent-reductions/#rest_code_f1a369bf6d7c4816b0cb25d752fec00c-10"&gt;&lt;/a&gt;&lt;span class="n"&gt;lazy_expression&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"arrayResult.b2nd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this code, &lt;cite&gt;sum(a, axis=0) + b * sin(c)&lt;/cite&gt; is defined but not executed immediately. When you’re ready to use the result, you can call &lt;cite&gt;lazy_expression.compute()&lt;/cite&gt; (returns a Blosc2 array that is compressed by default) to run the calculation. Alternatively, you can specify the part of the result that you are interested in with &lt;cite&gt;lazy_expression[0, :]&lt;/cite&gt; (returns a NumPy array). This way, you save CPU and memory and only perform the computation when necessary.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="dynamic-computation-reusing-and-updating-results"&gt;
&lt;h2&gt;Dynamic Computation: Reusing and Updating Results&lt;/h2&gt;
&lt;p&gt;Another big advantage of Blosc2 is its ability to compute persistent expressions that are &lt;strong&gt;dynamic&lt;/strong&gt;: when an operand is enlarged, Blosc2 re-adapts the expression to account for its new shape. This approach significantly speeds up processing time, especially when working with frequently updated or real-time data.&lt;/p&gt;
&lt;p&gt;For instance, if you have an expression stored, and only part of your dataset changes, Blosc2 can apply reductions dynamically to efficiently update the sum:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-1" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-1" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Resizing arrays and updating values&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-2" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-2" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-2"&gt;&lt;/a&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-3" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-3" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-3"&gt;&lt;/a&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-4" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-4" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-4"&gt;&lt;/a&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-5" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-5" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-5"&gt;&lt;/a&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-6" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-6" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-6"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Open the saved file&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-7" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-7" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-7"&gt;&lt;/a&gt;&lt;span class="n"&gt;lazy_expression&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;blosc2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urlpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;url_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-8" name="rest_code_0c3c0d0edc3f4a878beaef5591329cfc-8" href="https://blosc.org/posts/persistent-reductions/#rest_code_0c3c0d0edc3f4a878beaef5591329cfc-8"&gt;&lt;/a&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lazy_expression&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In this case, the final &lt;cite&gt;result&lt;/cite&gt; will have a shape of &lt;cite&gt;(30, 40)&lt;/cite&gt; (instead of the previous &lt;cite&gt;(20, 40)&lt;/cite&gt;). This allows for quick adaptability, which is crucial in data environments where values evolve constantly.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="why-persistent-reductions-and-lazy-expressions-matter"&gt;
&lt;h2&gt;Why Persistent Reductions and Lazy Expressions Matter&lt;/h2&gt;
&lt;p&gt;These features make Blosc2 a top choice for working with large datasets, as they allow for:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Broadcasting&lt;/strong&gt; of memory, on-disk or network operands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficient use of CPU and memory&lt;/strong&gt; by only executing calculations when needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic expressions&lt;/strong&gt; that adapt to changing data in operands.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced performance&lt;/strong&gt; due to streamlined, multi-threaded and pre-fetched calculations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together, lazy expressions and persistent reductions provide a flexible, resource-efficient way to manage complex data processes. They’re perfect for real-time analysis, evolving datasets, or any high-performance computing tasks requiring dynamic data handling.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Blosc2’s features offer a way to make data processing smarter and faster. If you work with large arrays or require adaptable workflows, Blosc2 can help you make the most of your data processing resources.&lt;/p&gt;
&lt;p&gt;For more in-depth guidance, visit the &lt;a class="reference external" href="https://www.blosc.org/python-blosc2/getting_started/tutorials/05.persistent-reductions.html"&gt;full tutorial on Blosc2&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;</description><category>data-processing</category><category>large-datasets</category><category>lazy-expressions</category><category>persistent-reduction</category><guid>https://blosc.org/posts/persistent-reductions/</guid><pubDate>Tue, 05 Nov 2024 12:58:20 GMT</pubDate></item></channel></rss>