问:是什么在释放人工智能 (AI) 和机器学习的力量?
答:释放人工智能和机器学习的力量就是让这些智能算法在大数据块上发挥作用。想象一下一只狗嗅出一种气味,这就是人工智能深入挖掘数据以找到我们无法发现的模式的方式。
人工智能使用一种称为机器学习的过程,从过去的数据中学习来预测未来的结果。这就像学习骑自行车一样,你会摔倒几次,但最终你会掌握它的窍门。人工智能也做同样的事情,但有数字和模式。
在现实世界中,想想Netflix 的推荐或Google 的搜索引擎。这些系统使用人工智能来分析您过去的行为并预测您接下来可能喜欢或搜索的内容。这有点像有一个私人助理,他在您行动之前就知道您想要什么。
不过,人工智能并不仅仅涉及大型科技公司。小企业可以使用人工智能来改善他们的服务,个人可以使用它来让他们的生活更轻松。这就像拥有一把瑞士军刀来处理数据。
问:C 编程中可以在 main() 之前使用 printf 吗?
答:是的。
让我从 C(或 C++)程序启动序列开始:
1.可执行文件被加载到 RAM 中
2.可执行文件中定义的入口点函数由加载程序调用(在没有操作系统入口点函数的裸机中定义为重置向量处理程序)
3.全局、静态变量初始化、构造函数调用 (__attribute__((constructor)) )
4.C/C++ 库初始化
5.主要被称为
调用可执行入口点时系统未初始化,调用 printf 肯定会失败。printf 在第一次调用之前必须映射到正确的输出设备。例如,在 Windows 下,当启动控制台应用程序时,Windows 将两个管道传递给可执行文件,用作 stdin 和 stdout。C/C++ 库(或者更好地称为编译器启动代码)的目的是正确初始化环境,例如将 printf 输出函数设置为 stdout。
其他函数也类似,例如 malloc(它具有用户可重写的函数)。
因此,在正确初始化之前调用 printf 在最好的情况下会失败,但也可能导致程序崩溃。
让用户代码在 main 之前执行的唯一方法是定义不同的入口点。默认情况下,编译器会放置自己的代码,例如,某些编译器调用启动函数(入口点)__main。
请注意控制台和 GUI 应用程序的启动过程是不同的。在GUI中默认调用入口点,在Windows下,WinMain和“编译器”提供了自己的实现。
关于全局、静态初始化。可执行映像可以具有单个或多个加载区域。在单个加载区域的情况下,启动代码的任务是清除未初始化的变量,将初始化的变量从可执行文件复制到内存(例如.data 部分)并调用构造函数。
如果可执行文件具有多个区域,则所有变量都由链接器放置在单独的区域中,加载器负责将区域加载到内存中,这将自动初始化所有全局/静态变量。但需要调用构造函数。
问:在复杂计算问题(AI 等)上,Python 与 C/C++/Pascal 的性能和内存使用情况相比如何?
答:如果比较用 Python(不导入非 Python 模块)和 C++ 编写的相同代码,Python 通常会慢 3 到 10 倍,并且使用 3 倍的内存。
但没有人这样做,除了那些只需要运行一次并且在一台台式电脑上花费不到几个小时的小问题之外,在这种情况下,最大限度地减少花在它上面的人力时间比让它运行得更快更重要。
对于更大的问题,“接近金属”运行的循环被用编译语言编写为 Python 模块。Python 导入模块并协调对该模块中的例程和方法的一系列调用。
一个科学问题可能会导入 Numpy 和 Scipy。那么 Python 解决方案的运行速度很可能比全部用 C++ 编写的版本更快,因为 Numpy 和 Scipy 中的例程经过了专家的优化。与原始数据数组相比,Python 解释器的内存开销很小。
如今,低级代码很可能在 GPU 而不是 CPU 中运行。Python 方法的另一个优点是不需要更改高级、复杂的 Python 代码。只需为硬件导入适当的低级模块即可。
领取专属 10元无门槛券
私享最新 技术干货