@@ -87,24 +87,30 @@ namespace python_multi_array
87
87
template <class T >
88
88
python::object make_typed_sized (const size_t * s, size_t ndim)
89
89
{
90
+ auto reset = [](const auto & arr)
91
+ {
92
+ std::fill (arr->origin (), arr->origin () + arr->num_elements (), 0 );
93
+ return arr;
94
+ };
95
+
90
96
switch (ndim)
91
97
{
92
98
case 1 :
93
- return python::object (std::make_shared<multi_array<T, 1 >>(extents[s[0 ]]));
99
+ return python::object (reset ( std::make_shared<multi_array<T, 1 >>(extents[s[0 ]]) ));
94
100
case 2 :
95
- return python::object (std::make_shared<multi_array<T, 2 >>(extents[s[0 ]][s[1 ]]));
101
+ return python::object (reset ( std::make_shared<multi_array<T, 2 >>(extents[s[0 ]][s[1 ]]) ));
96
102
case 3 :
97
- return python::object (std::make_shared<multi_array<T, 3 >>(extents[s[0 ]][s[1 ]][s[2 ]]));
103
+ return python::object (reset ( std::make_shared<multi_array<T, 3 >>(extents[s[0 ]][s[1 ]][s[2 ]]) ));
98
104
case 4 :
99
- return python::object (std::make_shared<multi_array<T, 4 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]]));
105
+ return python::object (reset ( std::make_shared<multi_array<T, 4 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]]) ));
100
106
case 5 :
101
- return python::object (std::make_shared<multi_array<T, 5 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]]));
107
+ return python::object (reset ( std::make_shared<multi_array<T, 5 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]]) ));
102
108
case 6 :
103
- return python::object (std::make_shared<multi_array<T, 6 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]]));
109
+ return python::object (reset ( std::make_shared<multi_array<T, 6 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]]) ));
104
110
case 7 :
105
- return python::object (std::make_shared<multi_array<T, 7 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]][s[6 ]]));
111
+ return python::object (reset ( std::make_shared<multi_array<T, 7 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]][s[6 ]]) ));
106
112
case 8 :
107
- return python::object (std::make_shared<multi_array<T, 8 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]][s[6 ]][s[7 ]]));
113
+ return python::object (reset ( std::make_shared<multi_array<T, 8 >>(extents[s[0 ]][s[1 ]][s[2 ]][s[3 ]][s[4 ]][s[5 ]][s[6 ]][s[7 ]]) ));
108
114
default :
109
115
throw std::invalid_argument (" shape" );
110
116
}
0 commit comments