コンストラクタの第二引数として boost::fortran_storage_order()を渡せば、内部データの配列順が列ベースになる = fortran関数(mklとか)に渡せる
初期化またはresize時にmulti_array::extent_rangeで指定できる
using array_type = boost::multi_array<double, 3>;
using range = array_type::extent_range;
array_type test_array[ boost::extents[range(-1, 10)][range(2, 5)][3] ];
// サイズが[11]x[4]x[3]の[-1から10]、[2から5]、[0から3]のmulti_arrayができる
もしくは reindex() を呼び出してもいい
test_array.reindex(1); // 全て1始まりに変更
boost::array<array_type::index, 3> bases = {{0, 1, -1}};
test_array.reindex(bases); // 0始まり、1始まり、-1始まりに変更
起点のインデックスは .index_bases() で取得できる
auto bases = test_array.index_bases(); // boost::array<array_type::index, 3>が返ってくる
std::cout << boost::format("bases = %d, %d, %d") % bases[0] % bases[1] % bases[2] << endl;
終点のインデックスは bases[0] + test_array.shape()[0] - 1 になる