-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathvo008_numpyInterface.py
43 lines (37 loc) · 1.28 KB
/
vo008_numpyInterface.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
## \file
## \ingroup tutorial_vecops
## \notebook -nodraw
## This tutorial illustrates the conversion of RVec 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.
##
## \macro_code
## \macro_output
##
## \date April 2018
## \author Stefan Wunsch
import ROOT
from sys import exit
try:
import numpy as np
except:
exit()
# Create a vector ROOT object and assign values
# Note that this works as well with a ROOT.std.vector
vec = ROOT.RVecF(2) # or ROOT.std.vector("float")(2)
vec[0] = 1
vec[1] = 2
print("Content of the ROOT vector object: {}".format([x for x in vec]))
# Interface ROOT vector with a numpy array
array = np.asarray(vec)
print("Content of the associated numpy array: {}".format([x for x in array]))
# 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.
vec[0] = 42
print(
"Content of the numpy array after changing the first entry of the ROOT vector: {}".
format([x for x in array]))
# Use numpy features on data of ROOT objects
print("Mean of the numpy array entries: {}".format(np.mean(array)))