2

ある multi_array のサイズを別のサイズに変更する必要があります。

Blitz ++では、私はただできる

arr1.resize(arr2.shape());

同様の長さの multi_array ソリューションはありますか? なぜなら

arr1.resize(boost::extents[arr2.shape()[0]][arr2.shape()[1]]);

少し長くて難しいようです。

4

2 に答える 2

0

これは 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 型のクラスでも機能します。)

于 2015-07-02T18:21:51.857 に答える