Pyroot 0 0 1_Array Interface

This tutorial illustrates the conversion of STL vectors and TVec to numpy arrays without copying the data. The memory-adoption is achieved by the dictionary array_interface, which is added dynamically to the Python objects by PyROOT.

Author: Stefan Wunsch
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Thursday, June 04, 2020 at 02:46 AM.

In [1]:
import ROOT
from sys import exit

try:
    import numpy as np
except:
    exit()
Welcome to JupyROOT 6.23/01

Create a vector ROOT object and assign values Note that this works as well with a TVec

In [2]:
vec = ROOT.std.vector("float")(2)
vec[0] = 1
vec[1] = 2
print("Content of the ROOT vector object: {}".format([x for x in vec]))
Content of the ROOT vector object: [1.0, 2.0]

Interface ROOT vector with a numpy array

In [3]:
array = np.asarray(vec)
print("Content of the associated numpy array: {}".format([x for x in array]))
Content of the associated numpy array: [1.0, 2.0]

The numpy array adopts the memory of the vector without copying the content. Note that the first entry of the numpy array changes when assigning a new value to the first entry of the ROOT vector.

In [4]:
vec[0] = 42
print(
    "Content of the numpy array after changing the first entry of the ROOT vector: {}".
    format([x for x in array]))
Content of the numpy array after changing the first entry of the ROOT vector: [42.0, 2.0]

Use numpy features on data of ROOT objects

In [5]:
print("Mean of the numpy array entries: {}".format(np.mean(array)))
Mean of the numpy array entries: 22.0