Как получить представление PyArrayObject *, похожее на следующий код Python?
# n-column array x
# d is the length of each column
print(x.shape) # => (d, n)
by_column = [x[::,i] for i in range(x.shape[1])]
assert len(by_column) == n
print(by_column[n-1].shape) # => (d,)
Пока мой код такой:
// my_array is a PyArrayObject*
std::vector<PyArrayObject*> columns = {};
npy_intp* dims = my_array->dimensions;
npy_intp* strides = my_array->strides;
std::vector<int> shape = {};
for (int i = 0; &dims[i] != strides; i++){
shape.push_back(dims[i]);
}
switch (shape.size()) {
case 1: {
// handle 1D array by simply iterating
}
case 2: {
int columns = shape[1];
// What now?
}
}
У меня проблемы с поиском какой-либо ссылки на это в C / C ++ как в документации, так и в исходном коде. Не могли бы вы привести пример того, как это можно сделать?
API C / C ++ для numpy выглядит действительно запутанным по сравнению с чем-то вроде std :: vector, и документация также не очень удобна для новичков, поэтому любые ссылки на более простые руководства также будут приветствоваться.