【问题标题】:multi_array boost library error?multi_array 提升库错误?
【发布时间】:2018-04-19 00:32:31
【问题描述】:

我在 C++ 中遇到了这个错误。我正在尝试使用 multi_array 实现 Strassen 矩阵乘法。我将一个数组分配给另一个相同维度的数组。 就像A11[i][j][k] = A[i][j][k]。我认为原因是那种台词。

断言失败:(size_type(idx - index_bases[0])

你知道原因吗?这个错误是什么意思?

typedef boost::multi_array<int_type, 3> array_type;
array_type::extent_gen extents;

array_type A(boost::extents[size][size][noc]);
array_type B(boost::extents[size][size][noc]);
array_type C(boost::extents[size][size][noc]);

 std::fill( A.origin(), A.origin() + A.num_elements(), 0 );
 std::fill( B.origin(), B.origin() + B.num_elements(), 0 );
 std::fill( C.origin(), C.origin() + C.num_elements(), 0 );

array_type Strr(int size,int noc,array_type A,array_type B, array_type C) {

    if(size == 2) {  //2-order
       C=Matrix_Multiply(size,noc, A, B, C);

    } else {
        //
        for(int i=0; i<size/2; i++) {
            for(int j=0; j<size/2; j++) {
                 for(int k=0; k<noc; j++) {

                A11[i][j][k] = A[i][j][k] ;

                A12[i][j][k]  = A[i][j+size/2][k] ;

        }

    }

}

我的代码是这样的:我不知道问题是什么。

错误:断言失败:(size_type(idx - index_bases[0])

【问题讨论】:

  • 什么是“我认为原因是那种台词。”意思是?发布更多代码以查看发生了什么如何?
  • (我认为)错误的原因是这个代码片段。 A11[i][j][k] = A[i][j][k] 将一个矩阵分配给另一个矩阵。但 A11 和 A 的尺寸相同。
  • 您需要发布更多代码,以便人们了解发生了什么。 stackoverflow.com/help/mcve
  • A11和A12从何而来

标签: boost matrix-multiplication boost-multi-array


【解决方案1】:

在最里面的循环中:

        for (int k = 0; k < noc; j++) {

你一定是指++k而不是++j

        for (int k = 0; k < noc; ++k) {

我也会简化 main:

int dim[] = {size,size,noc};
array_type A(dim), B(dim), C(dim);

默认情况下会进行值初始化。

multi_array 的想法是数组自描述,而不是您传递单独的参数(例如sizenoc):

array_type Strr(array_type A, array_type B) {
    static_assert(array_type::dimensionality == 3, "static invariant");
    size_t size = A.shape()[0];
    size_t noc  = A.shape()[2];

    assert(A.shape()[0] ==  A.shape()[1]);
    assert(std::equal_range(A.shape(), A.shape()+3, B.shape()));
    assert(std::equal_range(A.shape(), A.shape()+3, C.shape()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多