栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

NumCpp 使用示例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NumCpp 使用示例

1、下载NumCpp

  https://github.com/dpilger26/NumCpp   ,保留include目录就行

2、下载并编译Boost库

 下载Boost库  并按照下列链接C++ Boost库的编译及使用 - mingzhang - 博客园进行编译

3、配置Boost和Numcpp

在vs项目中配置numcpp和boost,其中boost的vs配置如下图所示

 4、进行测试

特别需要注意的是 nc::random::randInt({ 3, 4 }, 0, 10);这与官网发布的使用方法不一致

#include 
#include "boost/filesystem.hpp"
using namespace nc;
int main()
{
    // Containers
    nc::NdArray a0 = { {1, 2}, {3, 4} };
    nc::NdArray a1 = { {1, 2}, {3, 4}, {5, 6} };
    a1.reshape(2, 3);
    auto a2 = a1.astype();
    // Initializers
    auto a3 = nc::linspace(1, 10, 5);
    auto a4 = nc::arange(3, 7);
    auto a5 = nc::eye(4);
    auto a6 = nc::zeros(3, 4);
    auto a7 = nc::NdArray(3, 4) = 0;
    auto a8 = nc::ones(3, 4);
    auto a9 = nc::NdArray(3, 4) = 1;
    auto a10 = nc::nans(3, 4);
    auto a11 = nc::NdArray(3, 4) = nc::constants::nan;
    auto a12 = nc::empty(3, 4);
    auto a13 = nc::NdArray(3, 4);

    // Slicing/Broadcasting
    //auto a14 = nc::random::randInt({ 10, 10 }, 0, 100);
    auto a14 = nc::random::randInt({ 10, 10 }, 0, 100);
    auto value = a14(2, 3);//randInt
    auto slice = a14({ 2, 5 }, { 2, 5 });
    auto rowSlice = a14(a14.rSlice(), 7);
    auto values = a14[a14 > 50];
    a14.putMask(a14 > 50, 666);

    // Random
    nc::random::seed(666);
    auto a15 = nc::random::randN({ 3, 4 });
    auto a16 = nc::random::randInt({ 3, 4 }, 0, 10);
    auto a17 = nc::random::rand({ 3, 4 });
    auto a18 = nc::random::choice(a17, 3);

    // Concatenation
    auto a = nc::random::randInt({ 3, 4 }, 0, 10);
    auto b = nc::random::randInt({ 3, 4 }, 0, 10);
    auto c = nc::random::randInt({ 3, 4 }, 0, 10);

    auto a19 = nc::stack({ a, b, c }, nc::Axis::ROW);
    auto a20 = nc::vstack({ a, b, c });
    auto a21 = nc::hstack({ a, b, c });
    auto a22 = nc::append(a, b, nc::Axis::COL);

    // Diagonal, Traingular, and Flip
    auto d = nc::random::randInt({ 5, 5 }, 0, 10);
    auto a23 = nc::diagonal(d);
    auto a24 = nc::triu(a);
    auto a25 = nc::tril(a);
    auto a26 = nc::flip(d, nc::Axis::ROW);
    auto a27 = nc::flipud(d);
    auto a28 = nc::fliplr(d);

    // iteration
    for (auto it = a.begin(); it < a.end(); ++it)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    for (auto& arrayValue : a)
    {
        std::cout << arrayValue << " ";
    }
    std::cout << std::endl;

    // Logical
    auto a29 = nc::where(a > 5, a, b);
    auto a30 = nc::any(a);
    auto a31 = nc::all(a);
    auto a32 = nc::logical_and(a, b);
    auto a33 = nc::logical_or(a, b);
    auto a34 = nc::isclose(a, b);
    auto a35 = nc::allclose(a, b);

    // Comparisons
    auto a36 = nc::equal(a, b);
    auto a37 = a == b;
    auto a38 = nc::not_equal(a, b);
    auto a39 = a != b;
    auto a40 = nc::nonzero(a);

    // Minimum, Maximum, Sorting
    auto value1 = nc::min(a);
    auto value2 = nc::max(a);
    auto value3 = nc::argmin(a);
    auto value4 = nc::argmax(a);
    auto a41 = nc::sort(a, nc::Axis::ROW);
    auto a42 = nc::argsort(a, nc::Axis::COL);
    auto a43 = nc::unique(a);
    auto a44 = nc::setdiff1d(a, b);
    auto a45 = nc::diff(a);

    // Reducers
    auto value5 = nc::sum(a);
    auto a46 = nc::sum(a, nc::Axis::ROW);
    auto value6 = nc::prod(a);
    auto a47 = nc::prod(a, nc::Axis::ROW);
    auto value7 = nc::mean(a);
    auto a48 = nc::mean(a, nc::Axis::ROW);
    auto value8 = nc::count_nonzero(a);
    auto a49 = nc::count_nonzero(a, nc::Axis::ROW);

    // I/O
    a.print();
    std::cout << a << std::endl;

    auto tempDir = boost::filesystem::temp_directory_path();
    auto tempTxt = (tempDir / "temp.txt").string();
    a.tofile(tempTxt);
    auto a50 = nc::fromfile(tempTxt);

    auto tempBin = (tempDir / "temp.bin").string();
    nc::dump(a, tempBin);
    auto a51 = nc::load(tempBin);

    // Mathematical Functions

    // Basic Functions
    auto a52 = nc::abs(a);
    auto a53 = nc::sign(a);
    auto a54 = nc::remainder(a, b);
    auto a55 = nc::clip(a, 3, 8);
    auto xp = nc::linspace(0.0, 2.0 * nc::constants::pi, 100);
    auto fp = nc::sin(xp);
    auto x = nc::linspace(0.0, 2.0 * nc::constants::pi, 1000);
    auto f = nc::interp(x, xp, fp);

    // Exponential Functions
    auto a56 = nc::exp(a);
    auto a57 = nc::expm1(a);
    auto a58 = nc::log(a);
    auto a59 = nc::log1p(a);

    // Power Functions
    auto a60 = nc::power(a, 4);
    auto a61 = nc::sqrt(a);
    auto a62 = nc::square(a);
    auto a63 = nc::cbrt(a);

    // Trigonometric Functions
    auto a64 = nc::sin(a);
    auto a65 = nc::cos(a);
    auto a66 = nc::tan(a);

    // Hyperbolic Functions
    auto a67 = nc::sinh(a);
    auto a68 = nc::cosh(a);
    auto a69 = nc::tanh(a);

    // Classification Functions
    auto a70 = nc::isnan(a.astype());
    //nc::isinf(a);

    // Linear Algebra
    auto a71 = nc::norm(a);
    auto a72 = nc::dot(a, b.transpose());

    auto a73 = nc::random::randInt({ 3, 3 }, 0, 10);
    auto a74 = nc::random::randInt({ 4, 3 }, 0, 10);
    auto a75 = nc::random::randInt({ 1, 4 }, 0, 10);
    auto value9 = nc::linalg::det(a73);
    auto a76 = nc::linalg::inv(a73);
    auto a77 = nc::linalg::lstsq(a74, a75);
    auto a78 = nc::linalg::matrix_power(a73, 3);
    auto a79 = nc::linalg::multi_dot({ a, b.transpose(), c });

    nc::NdArray u;
    nc::NdArray s;
    nc::NdArray vt;
    nc::linalg::svd(a.astype(), u, s, vt);
}
5、测试结果

第一次运行时可能会报错,按下图修改后即可

6、使用numcpp计算向量的余弦距离
#include 
#include 
using namespace nc;
template
float alt_cosine(const NdArray& x, const NdArray& y) {
    float x_y=nc::norm(x).at(0)* nc::norm(y).at(0);
    if (x_y < 0.000001) {
        x_y = 0.000001;
    }
    float xs=nc::sum(nc::abs(x)).at(0);
    float ys = nc::sum(nc::abs(y)).at(0);
    if (xs + ys < 0.1) {
        return 0;
    }
    return 1-nc::dot(x,y).at(0)/x_y;
}
int main()
{
    nc::NdArray a = { {0.2}, {-1.43}, {1.34} };
    nc::NdArray b = { {-2.2}, {0.3}, {2.34} };
    float dis = alt_cosine(a, b);
    printf_s("向量A:");
    a.print();
    printf_s("向量B:");
    b.print();
    printf_s("余弦距离: %f", dis);
}

运行结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号