Mercurial > hg > vampy-host
comparison VectorConversion.cpp @ 41:55fcd0e3e513
Fix handling of 2D NumPy arrays
author | Chris Cannam |
---|---|
date | Wed, 26 Nov 2014 18:08:53 +0000 |
parents | fa3f80d4e340 |
children | 36cc53aad853 |
comparison
equal
deleted
inserted
replaced
40:fa3f80d4e340 | 41:55fcd0e3e513 |
---|---|
189 setValueError(msg); | 189 setValueError(msg); |
190 return v; | 190 return v; |
191 } | 191 } |
192 | 192 |
193 /// check strides (useful if array is not continuous) | 193 /// check strides (useful if array is not continuous) |
194 size_t strides = *((size_t*) PyArray_STRIDES(pyArray)); | 194 size_t *strideptr = (size_t*) PyArray_STRIDES(pyArray); |
195 | |
196 cerr << "dims = " << PyArray_DIMS(pyArray)[0] << "x" << PyArray_DIMS(pyArray)[1] << ", strides = " << strides << endl; | |
197 | 195 |
198 /// convert the array | 196 /// convert the array |
199 for (int i = 0; i < PyArray_DIMS(pyArray)[0]; ++i) { | 197 for (int i = 0; i < PyArray_DIMS(pyArray)[0]; ++i) { |
200 | 198 |
201 vector<float> vv; | 199 vector<float> vv; |
202 | 200 |
203 switch (descr->type_num) { | 201 switch (descr->type_num) { |
204 | 202 |
205 case NPY_FLOAT : // dtype='float32' | 203 case NPY_FLOAT : // dtype='float32' |
206 vv = PyArray_Convert<float,float>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); | 204 vv = PyArray_Convert<float,float>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); |
207 break; | 205 break; |
208 case NPY_DOUBLE : // dtype='float64' | 206 case NPY_DOUBLE : // dtype='float64' |
209 vv = PyArray_Convert<float,double>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); | 207 vv = PyArray_Convert<float,double>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); |
210 break; | 208 break; |
211 case NPY_INT : // dtype='int' | 209 case NPY_INT : // dtype='int' |
212 vv = PyArray_Convert<float,int>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); | 210 vv = PyArray_Convert<float,int>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); |
213 break; | 211 break; |
214 case NPY_LONG : // dtype='long' | 212 case NPY_LONG : // dtype='long' |
215 vv = PyArray_Convert<float,long>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strides); | 213 vv = PyArray_Convert<float,long>(PyArray_GETPTR2(pyArray, i, 0),PyArray_DIMS(pyArray)[1],strideptr[1]); |
216 break; | 214 break; |
217 default : | 215 default : |
218 string msg = "Unsupported value type in NumPy array object."; | 216 string msg = "Unsupported value type in NumPy array object."; |
219 cerr << "VectorConversion::PyArray_To_FloatVector failed (value type = " << descr->type_num << "). Error: " << msg << endl; | 217 cerr << "VectorConversion::PyArray_To_FloatVector failed (value type = " << descr->type_num << "). Error: " << msg << endl; |
220 setValueError(msg); | 218 setValueError(msg); |