numcpp boostvs2017踩坑记录

news2024/11/18 5:33:20

之前想用boost1.69版本,但是boost与numcpp编译过程死活找不到boost1.69,踩坑无数,只能采用1.79版本。

https://www.cnblogs.com/tang-zhou-zhou/p/16067695.html

在 Windows 下通过 CMake 使用 Boost 库_cmake boost-CSDN博客

在VS2019中配置Boost C++、NumCpp、Eigen 和opencv4.3.0库环境_visual studio c++配置numcpp-CSDN博客

vs2017+win10配置Boost与NumCpp,以及boost与PLC 1.8.1冲突的解决方法_手动添加 numcpp 标头,您还需要手动包含boost标头-CSDN博客

boost下载地址:link

 直接二进制地址: Boost C++ Libraries - Browse /boost-binaries/1.79.0 at SourceForge.net

官方地址为:https://www.boost.org/users/download/ 

1 编译boost

.\b2.exe --link=static --toolset=msvc-14.1  --address-model=64 --architecture=x64 variant=release

测试程序:

#include<iostream>
#include<stdio.h>

#include<boost/version.hpp>	//包含boost头文件
#include<boost/config.hpp>

int main() {
	using namespace std;
	cout << BOOST_VERSION << endl;
	cout << BOOST_LIB_VERSION << endl;
	cout << BOOST_PLATFORM << endl;
	cout << BOOST_COMPILER << endl;
	cout << BOOST_STDLIB << endl;

	system("pause");
	return 0;
}

注意的是Boost_DIR所在路径BoostConfig.cmake  link

生成vs2017工程 

编译过程遇见error MSB3073: 命令“setlocal”错误

参考link解决

项目属性页——配置属性——生成事件——生成后事件——在生成中使用“”修改为“”   

大功告成

之后就是配置numcpp和boost,numcpp是hpp的库,配置简单

测试代码:

#include <NumCpp.hpp>
#include "boost/filesystem.hpp"
using namespace nc;
int main()
{
    // Containers
    nc::NdArray<int> a0 = { {1, 2}, {3, 4} };
    nc::NdArray<int> a1 = { {1, 2}, {3, 4}, {5, 6} };
    a1.reshape(2, 3);
    auto a2 = a1.astype<double>();
    // Initializers
    auto a3 = nc::linspace<int>(1, 10, 5);
    auto a4 = nc::arange<int>(3, 7);
    auto a5 = nc::eye<int>(4);
    auto a6 = nc::zeros<int>(3, 4);
    auto a7 = nc::NdArray<int>(3, 4) = 0;
    auto a8 = nc::ones<int>(3, 4);
    auto a9 = nc::NdArray<int>(3, 4) = 1;
    auto a10 = nc::nans(3, 4);
    auto a11 = nc::NdArray<double>(3, 4) = nc::constants::nan;
    auto a12 = nc::empty<int>(3, 4);
    auto a13 = nc::NdArray<int>(3, 4);
 
    // Slicing/Broadcasting
    //auto a14 = nc::random<int>::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<double>({ 3, 4 });
    auto a16 = nc::random::randInt<int>({ 3, 4 }, 0, 10);
    auto a17 = nc::random::rand<double>({ 3, 4 });
    auto a18 = nc::random::choice<double>(a17, 3);
 
    // Concatenation
    auto a = nc::random::randInt<int>({ 3, 4 }, 0, 10);
    auto b = nc::random::randInt<int>({ 3, 4 }, 0, 10);
    auto c = nc::random::randInt<int>({ 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<int>({ 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<int>(a);
    auto a46 = nc::sum<int>(a, nc::Axis::ROW);
    auto value6 = nc::prod<int>(a);
    auto a47 = nc::prod<int>(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<int>(tempTxt);
 
    auto tempBin = (tempDir / "temp.bin").string();
    nc::dump(a, tempBin);
    auto a51 = nc::load<int>(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<double>(0.0, 2.0 * nc::constants::pi, 100);
    auto fp = nc::sin(xp);
    auto x = nc::linspace<double>(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<int>(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<double>());
    //nc::isinf(a);
 
    // Linear Algebra
    auto a71 = nc::norm<int>(a);
    auto a72 = nc::dot<int>(a, b.transpose());
 
    auto a73 = nc::random::randInt<int>({ 3, 3 }, 0, 10);
    auto a74 = nc::random::randInt<int>({ 4, 3 }, 0, 10);
    auto a75 = nc::random::randInt<int>({ 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<int>(a73, 3);
    auto a79 = nc::linalg::multi_dot<int>({ a, b.transpose(), c });
 
    nc::NdArray<double> u;
    nc::NdArray<double> s;
    nc::NdArray<double> vt;
    nc::linalg::svd(a.astype<double>(), u, s, vt);
}

 遇见问题参考link 注释改行解决

最后有人说NumCpp 中看不中用

#include <NumCpp.hpp>
#include <iostream>
#include <chrono>

int main(int, char **) {
	auto a = nc::random::randInt<int>({ 1000, 1000 }, 0, 10);
	nc::NdArray<double> u, s, vt;

	// 计时开始
	auto t0 = std::chrono::high_resolution_clock::now();
	nc::linalg::svd(a.astype<double>(), u, s, vt);

	// 计时结束
	auto t1 = std::chrono::high_resolution_clock::now();
	auto duration = std::chrono::duration_cast<std::chrono::milliseconds> (t1 - t0);
	std::cout << duration.count() << std::endl;

	return 0;
} 

 实际测试性能能确实拉跨

argmax测试:

#include <iostream>
#include <chrono>
#include "NumCpp.hpp"

int main() {
	// 设置数组大小
	constexpr uint32_t arraySize = 1000000;
	nc::NdArray<double> largeArray = nc::linspace<double>(0, 100, arraySize);

	// 定义测试次数
	constexpr int numTests = 1000;

	// 执行性能测试
	std::chrono::duration<double> totalDuration(0);
	for (int i = 0; i < numTests; ++i) {
		auto start = std::chrono::high_resolution_clock::now();
		auto maxIndex = nc::argmax(largeArray);
		auto end = std::chrono::high_resolution_clock::now();
		totalDuration += end - start;
	}

	// 输出平均执行时间
	double averageTime = totalDuration.count() / numTests;
	std::cout << "Average time for argmax function: " << averageTime << " seconds." << std::endl;

	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

析构 函数

对象死亡的时候会调用析构函数 #include<iostream> using namespace std;class MM { public:~MM(){cout << "调用析构函数" << endl << endl;}};int main() {{MM mm;//动态申请的内存需要手动释放MM* p new MM();cout << "1...…

【Java常用的API】JDK7以前时间相关类

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

js实现拖放效果

dataTransfer对象 说明&#xff1a;dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性&#xff0c;所以在拖放事件的事件处理程序外部无法访问 dataTransfer。在事件处理程序内部&#xff0c;可以使用这个对象的属性和方法实现拖放功能…

Linux(centos7)部署hadoop集群

部署环境要求:已完成JDK环境部署、配置完成固定IP、SSH免费登录、防火墙关闭等。 1、下载、上传主机 官网:https://hadoop.apache.org 2、解压缩、创建软连接 解压: tar -zxvf hadoop-3.3.6.tar.gz软连接: ln -s /usr/local/apps/hadoop-3.3.6 hadoop3、文件配置 hadoo…

合辑下载 | MatrixOne 与 MySQL 全面对比

前言 MatrixOne是一款高度兼容MySQL语法的HTAP数据库&#xff0c;采用云原生化和存储、计算、事务分离的架构打造了HSTAP超融合数据引擎&#xff0c;实现单一数据库系统同时支持OLTP、OLAP、流计算等多种业务负载。基于MatrixOne高度兼容MySQL的定位&#xff0c;社区的小伙伴在…

多层陶瓷电容器(MLCC)的基本结构与特点

多层陶瓷电容器&#xff08;MLCC&#xff09;是一种电子元件&#xff0c;用于存储电荷和调节电路中的电容值。它们由多个陶瓷层组成&#xff0c;每个层之间夹有金属电极&#xff0c;然后堆叠在一起&#xff0c;并在两端连接上导体引线&#xff0c;形成一个整体结构。在外部通常…

【保姆级讲解如何下载MATLAB和安装MATLAB】

&#x1f308;博主&#xff1a;程序员不想YY啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 &#x1f91d;希望本文对您有所裨益&#xff0c;如有…

【Java程序设计】【C00384】基于(JavaWeb)Springboot的民航网上订票系统(有论文)

【C00384】基于&#xff08;JavaWeb&#xff09;Springboot的民航网上订票系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

Linux的VirtualBox中USB设备无法选择USB3.0怎么办?

在VirtualBox中&#xff0c;如果遇到USB设备无法选择 USB 3.0 的问题&#xff0c;可以尝试按照以下步骤来解决&#xff1a; 确保VirtualBox版本支持USB 3.0&#xff1a;首先&#xff0c;你需要确认你的VirtualBox版本是否支持USB 3.0。一些较旧的版本可能不支持&#xff0c;因此…

09 网络ARP请求,响应,ICMP协议

arp协议_arp请求_arp回应 ICMP包构造ping搜狐服务器参考 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <linux/if_packet.h> #include <linux/if_ether.h> #include <string.h> #includ…

加密软件VMProtect教程:使用脚本Mach-O文件

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

怎么制作iOS证书

首先我们登录appuploder官网 搜索 appuploder 第一个就是我们官网啦&#xff0c;网址是&#xff1a;Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 可以跨平台开发&#xff0c;无论是Windows还是Ma…

前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗&#xff1f;为什么 原因&#xff1a;当使用const声明一个对象或数组时&#xff0c;实际上是保证了对象或数组的引用不会被修改&#xff0c;但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…

搭载前净柔泉女冲技术的科勒马桶盖,你的家中必备

近几年智能家居逐渐成为众多家庭的首选&#xff0c;尤其是智能马桶已经逐渐变成家中必备&#xff0c;但智能马桶动辄几千上万的价格让很多家庭望而却步&#xff0c;于是智能马桶盖应运而生。科勒清舒宝智能便盖不仅可以适配市面上大多数马桶&#xff0c;而且功能丰富&#xff0…

基于springboot+vue调用百度ai实现车牌号识别功能

百度车牌号识别官方文档 结果视频演示 后端代码 private String getCarNumber(String imagePath, int count) {// 请求urlString url "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";try {byte[] imgData FileUtil.readFileByBytes(imagePath);Stri…

精酿啤酒:多阶段发酵工艺的特点与优势

Fendi Club啤酒采用多阶段发酵工艺&#xff0c;这种工艺在啤酒酿造中具有显著的特点和优势。 首先&#xff0c;多阶段发酵工艺是一种复杂的酿造过程&#xff0c;它包括多个阶段的发酵和陈化过程。这种工艺需要切确控制每个阶段的时间、温度和酵母种类等参数&#xff0c;以确保…

【揭秘】企讯通106短信通知:那些你不可不知的“幕后功臣”

在日常生活中&#xff0c;你是否留意过那些来自“106”开头的短信&#xff1f;它们悄无声息地出现在你的手机收件箱&#xff0c;为你带来账单提醒、验证码、优惠活动等各类重要信息。看似平淡无奇的“106短信通知”&#xff0c;实则蕴含着丰富的科技力量与智慧结晶。今天&#…

together.ai简介

Together AI Solutions | Fastest Tools for Building Private Models for Enterprise Quickstart

【linux深入剖析】基础IO操作 | 使用Linux库函数实现读写操作 | 文件相关系统调用接口

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.复习C文件IO相关操…

设计模式深度解析:深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 开篇&#xff1a; 欢迎来到设计模式的神秘…