当前位置: 首页>>代码示例>>C++>>正文


C++ SparseArray类代码示例

本文整理汇总了C++中SparseArray的典型用法代码示例。如果您正苦于以下问题:C++ SparseArray类的具体用法?C++ SparseArray怎么用?C++ SparseArray使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了SparseArray类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: TEST

TEST(SparseArrayTest, InsertString) {
    SparseArray<string>* tDString = new SparseArray<string>(3, 3, "default");
    tDString->insert(1, 2, "Sparse");

    EXPECT_EQ("Sparse", tDString->access(1, 2));
    delete tDString;
}
开发者ID:GregGay,项目名称:csci333_Project2,代码行数:7,代码来源:TwoDArray.cpp

示例2: getColumn

SparseArray SparseMatrix::getColumn(unsigned i) const { 
    SparseArray column;
    for (unsigned j=0; j<numRows(); ++j) {
        int pos = _row[j].findIndex(i);
        if (pos != -1) column.insert(j, _row[j].readValue(pos));
    }
    return column;
}
开发者ID:Elisane,项目名称:PRAT,代码行数:8,代码来源:sparse_matrix.cpp

示例3: setColumn

void SparseMatrix::setColumn(unsigned i, const SparseArray& col) {
    unsigned nnz = col.numNonZeros();
    for (unsigned j=0; j<nnz; ++j) {
        int  index = col.readIndex(j);
        double value = col.readValue(j);
        _row[index].setValue(i, value);
    }
}
开发者ID:Elisane,项目名称:PRAT,代码行数:8,代码来源:sparse_matrix.cpp

示例4: sparseConvertStorageToStorage

SparseArray<T> sparseConvertStorageToStorage(const SparseArray<T> &in)
{
    // Dummy function
    // TODO finish this function when support is required
    AF_ERROR("CPU Backend only supports Dense to CSR or COO", AF_ERR_NOT_SUPPORTED);

    in.eval();

    SparseArray<T> dense = createEmptySparseArray<T>(in.dims(), (int)in.getNNZ(), dest);

    return dense;
}
开发者ID:victorv,项目名称:arrayfire,代码行数:12,代码来源:sparse.cpp

示例5: sparseConvertStorageToDense

Array<T> sparseConvertStorageToDense(const SparseArray<T> &in_)
{
    // MKL only has dns<->csr.
    // CSR <-> CSC is only supported if input is square

    if(stype == AF_STORAGE_CSC)
        AF_ERROR("CPU Backend only supports Dense to CSR or COO", AF_ERR_NOT_SUPPORTED);

    in_.eval();

    Array<T> dense_ = createValueArray<T>(in_.dims(), scalar<T>(0));
    dense_.eval();

    auto func = [=] (Array<T> dense, const SparseArray<T> in) {
        // Read: https://software.intel.com/en-us/node/520848
        // But job description is incorrect with regards to job[1]
        // 0 implies row major and 1 implies column major
        int j1 = 1, j2 = 0;
        const int job[] = {1, j1, j2, 2, (int)dense.elements(), 1};

        const int M = dense.dims()[0];
        const int N = dense.dims()[1];

        int ldd = dense.strides()[1];

        int info = 0;

        Array<T  > values = in.getValues();
        Array<int> rowIdx = in.getRowIdx();
        Array<int> colIdx = in.getColIdx();

        // Have to mess up all const correctness because MKL dnscsr function
        // is bidirectional and has input/output on all pointers
        dnscsr_func<T>()(
                job, &M, &N,
                reinterpret_cast<ptr_type<T>>(dense.get()), &ldd,
                reinterpret_cast<ptr_type<T>>(const_cast<T*>(values.get())),
                const_cast<int*>(colIdx.get()),
                const_cast<int*>(rowIdx.get()),
                &info);
    };

    getQueue().enqueue(func, dense_, in_);

    if(stype == AF_STORAGE_CSR)
        return dense_;
    else
        AF_ERROR("CPU Backend only supports Dense to CSR or COO", AF_ERR_NOT_SUPPORTED);

    return dense_;
}
开发者ID:victorv,项目名称:arrayfire,代码行数:51,代码来源:sparse.cpp

示例6: sparseConvertCOOToDense

Array<T> sparseConvertCOOToDense(const SparseArray<T> &in)
{
    in.eval();

    Array<T> dense = createValueArray<T>(in.dims(), scalar<T>(0));
    dense.eval();

    const Array<T>   values = in.getValues();
    const Array<int> rowIdx = in.getRowIdx();
    const Array<int> colIdx = in.getColIdx();

    getQueue().enqueue(kernel::coo2dense<T>, dense, values, rowIdx, colIdx);

    return dense;
}
开发者ID:victorv,项目名称:arrayfire,代码行数:15,代码来源:sparse.cpp

示例7: numNonZeros

unsigned SparseMatrix::copyCCS(long*& colptr, long*& index, double*& value) const {
	unsigned N = numNonZeros();
	colptr = (long int*) malloc((numColumns() + 1) * sizeof(long int));
	index  = (long int*) malloc(N * sizeof(long int));
	value  = (double*) malloc(N * sizeof(double));
	
	colptr[0] = 0;
	for (unsigned i = 0; i < numColumns(); ++i) {
        SparseArray col = getColumn(i);
		int offset = col.numNonZeros();
        col.copy( &(index[colptr[i]]), &(value[colptr[i]]) );
		colptr[i+1] = colptr[i] + offset;
	}
	return N;
}
开发者ID:Elisane,项目名称:PRAT,代码行数:15,代码来源:sparse_matrix.cpp

示例8: TEST

TEST(sparseTest, getNumCols) {
  SparseArray<int>* i = new SparseArray<int>(5, 5, 0);
  SparseArray<double>* d = new SparseArray<int>(5, 10, 0);
  SparseArray<std::string>* s = new SparseArray<std::string>(5, 19, 0);

  i->insert(2, 2, 7);
  d->insert(4, 4, 3.145);
  s->insert(0, 0, "Hello");

  EXPECT_EQ(5, i->getNumCols());
  EXPECT_EQ(10, d->getNumCols());
  EXPECT_EQ(19, s->getNumCols());

  delete i;
  delete d;
  delete s;
}
开发者ID:hcsnyder,项目名称:csci333-Project2,代码行数:17,代码来源:Array_test.cpp

示例9: TEST

TEST(Sparse, Print) {
	SparseArray<double>* newSparse = new SparseArray<double>(25,25,1.1);
	newSparse->insert(1,2,1.2);
	newSparse->insert(9,8,2.2);
	newSparse->insert(7,2,3.3);
	newSparse->insert(6,4,4.4);
	newSparse->insert(0,8,5.5);
	newSparse->insert(19,14,6.6);
	newSparse->insert(20,20,7.7);
	newSparse->insert(14,6,8.8);
	newSparse->insert(24,24,9.9);
	newSparse->print();
	delete newSparse;
}
开发者ID:billymills,项目名称:sparse-array-api,代码行数:14,代码来源:Sparse.cpp

示例10: cosSim

double cosSim(const SparseArray& a, const SparseArray& b) {
    double ab = 0, a2 = 0, b2 = 0;
    auto i = a.begin(), j = b.begin();

    while(i != a.end() || j != b.end()) {
        if(i == a.end()) {
            b2 += j->value * j->value;
            ++j;
        } else if(j == b.end()) {
            a2 += i->value * i->value;
            ++i;
        } else if((*i) < (*j)) {
            a2 += i->value * i->value;
            ++i;
        } else if((*j) < (*i)) {
            b2 += j->value * j->value;
            ++j;
        } else {
            a2 += i->value * i->value;
            b2 += j->value * j->value;
            ab += i->value * j->value;
            ++i;
            ++j;
        }
    }

    if(a2 == 0 || b2 == 0) {
        return 1.0;
    } else {
        //cout << "ab=" << ab << " a2=" << a2 << " b2=" << b2 << endl;
        return ab / sqrt(a2*b2);
    }
}
开发者ID:motazsaad,项目名称:oneta,代码行数:33,代码来源:mate-finding.cpp

示例11: readTopicFile

/**
 * Read a topic vector file
 * The format of these files are such that each line is:
 * idx1 idx2 ... idxN ||| val1 val2 ... valN
 * Which represents a coordinate form sparse array
 * @param t Vector to write to
 * @param fname The file name to read from
 */
void readTopicFile(vector<SparseArray>& t, const char *fname) {
    cerr << "Reading " << fname << endl;
    int linesRead = 1;
    ifstream topic1file(fname,ifstream::in);
    if(topic1file.fail()) {
        cerr << "Failed to read " << fname << endl;
        return;
    }
    string line;
    while(getline(topic1file,line)) {
        stringstream ss(line);
        ss.exceptions(ifstream::failbit);
        if(linesRead % 10 == 0) {
            cerr << ".";
        }
        cerr.flush();
        linesRead++;
        SparseArray arr;
        while(ss.peek() != '|') {
            SparseArrayElem e;
            ss >> e.idx;
            arr.push_back(e);
            while(ss.peek() == ' ') {
                ss.get();
            }
        }
        while(ss.peek() == '|' || ss.peek() == ' ') {
            ss.get();
        }
        unsigned vals = 0;
        for(auto it = arr.begin(); it != arr.end(); ++it) {
            if(++vals > arr.size()) {
                throw runtime_error("Index and value length differ (too many values)");
            }
            ss >> it->value;
        }
        if(vals != arr.size()) {
            throw runtime_error("Index and value length differ (too few values)");
        }

        sort(arr.begin(),arr.end());
        t.push_back(arr);
    }
    cerr << "OK" << endl;
}
开发者ID:motazsaad,项目名称:oneta,代码行数:53,代码来源:mate-finding.cpp

示例12: Test

Test(sparseTest, remove) {
  SparseArray<int>* i = new SparseArray<int>(5, 5, 0);
  SparseArray<double>* d = new SparseArray<int>(5, 5, 0);
  SparseArray<std::string>* s = new SparseArray<std::string>(5, 5, "o");
  
  i->insert(2, 2, 7);
  d->insert(4, 4, 3.145);
  s->insert(0, 0, "Hello");
  i->insert(3, 3, 9);
  
  i->remove(2, 2);
  d->remove(4, 4);
  s->remove(0, 0);

  s->insert(0, 0, "y");

  EXPECT_EQ(0, i->access(2, 2));
  EXPECT_EQ(0, d->access(4, 4));
  EXPECT_EQ("y", s->access(0, 0));
  EXPECT_EQ(9, i->insert(3, 3));

  delete i;
  delete d;
  delete s;
}
开发者ID:hcsnyder,项目名称:csci333-Project2,代码行数:25,代码来源:Array_test.cpp


注:本文中的SparseArray类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。