ある multi_array のサイズを別のサイズに変更する必要があります。
Blitz ++では、私はただできる
arr1.resize(arr2.shape());
同様の長さの multi_array ソリューションはありますか? なぜなら
arr1.resize(boost::extents[arr2.shape()[0]][arr2.shape()[1]]);
少し長くて難しいようです。
ある multi_array のサイズを別のサイズに変更する必要があります。
Blitz ++では、私はただできる
arr1.resize(arr2.shape());
同様の長さの multi_array ソリューションはありますか? なぜなら
arr1.resize(boost::extents[arr2.shape()[0]][arr2.shape()[1]]);
少し長くて難しいようです。
これは Boost.MultiArray のもう 1 つの見落としだと思います。形状 (次元サイズ)、ベース インデックス (各次元の 0 または 1 など)、および拡張機能 (各次元のベース インデックスとサイズ) を取得できる一連の「ユーティリティ」関数を作成しました。
namespace boost{
template<class MultiArray>
detail::multi_array::extent_gen<MultiArray::dimensionality>
extension(MultiArray const& ma){ //this function is adapted from
typedef detail::multi_array::extent_gen<MultiArray::dimensionality> gen_type;
gen_type ret;
typedef typename gen_type::range range_type;
for(int i=0; i != MultiArray::dimensionality; ++i)
ret.ranges_[i] = range_type(ma.index_bases()[i], ma.index_bases()[i]+ma.shape()[i]);
return ret;
}
}
これは後で次のように使用されます。
boost::multi::array<double, 3> m(boost::multi::extents[3][4][5]);
boost::multi::array<double, 3> n(extension(m)); // n takes the extension (and shape) of m
(ベース インデックスがゼロでない場合も機能します。ビューやその他の multi_array 型のクラスでも機能します。)