python中的numpy是什么
发布时间:2025-05-13 03:49:07 发布人:远客网络
一、python中的numpy是什么
NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种例程,包括数学,逻辑,形状操作,排序,选择,I/ O离散傅立叶变换,基本线性代数,基本统计运算,随机模拟等等。
NumPy包的核心是ndarray对象。这封装了同构数据类型的n维数组,许多操作在编译代码中执行以提高性能。NumPy数组和标准Python序列之间有几个重要的区别:
1、NumPy数组在创建时具有固定大小,与Python列表(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原始数组。
2、NumPy数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。例外:可以有(Python,包括NumPy)对象的数组,从而允许不同大小的元素的数组。
3、NumPy数组有助于对大量数据进行高级数学和其他类型的操作。通常,与使用Python的内置序列相比,这些操作的执行效率更高,代码更少。
4、越来越多的基于Python的科学和数学软件包正在使用NumPy数组;虽然这些通常支持Python序列输入,但它们在处理之前将这些输入转换为NumPy数组,并且它们通常输出NumPy数组。换句话说,为了有效地使用当今大量(甚至大多数)基于Python的科学/数学软件,只知道如何使用Python的内置序列类型是不够的-还需要知道如何使用NumPy数组。
二、PyTorch中的NumPy是一种什么技术
1、到底是怎样的一个bug,能让95%的Pytorch库中招,就连特斯拉AI总监深受困扰?
2、还别说,这个bug虽小,但有够“狡猾”的。
3、这就是最近Reddit上热议的一个话题,是一位网友在使用再平常不过的Pytorch+Numpy组合时发现。
4、最主要的是,在代码能够跑通的情况下,它甚至还会影响模型的准确率!
5、除此之外,网友热议的另外一个点,竟然是:
6、事情的起因是一位网友发现,在PyTorch中用NumPy来生成随机数时,受到数据预处理的限制,会多进程并行加载数据,但最后每个进程返回的随机数却是相同的。
7、他还举出例子证实了自己的说法。
8、如下是一个示例数据集,它会返回三个元素的随机向量。这里采用的批量大小分别为2,工作进程为4个。
9、然后神奇的事情发生了:每个进程返回的随机数都是一样的。
10、这个结果会着实让人有点一头雾水,就好像数学应用题求小明走一段路程需要花费多少时间,而你却算出来了负数。
11、发现了问题后,这位网友还在GitHub上下载了超过10万个PyTorch库,用同样的方法产生随机数。
12、结果更加令人震惊:居然有超过95%的库都受到这个问题的困扰!
13、这其中不乏PyTorch的官方教程和OpenAI的代码,连特斯拉AI总监Karpathy也承认自己“被坑过”!
14、但有一说一,这个bug想要解决也不难:只需要在每个epoch都重新设置seed,或者用python内置的随机数生成器就可以避免这个问题。
15、如果这个问题已经可以解决,为什么还会引起如此大的讨论呢?
16、因为网友们的重点已经上升到了“哲学”层面:
17、在Reddit上有人认为:这不是一个bug。
18、虽然这个问题非常常见,但它并不算是一个bug,而是一个在调试时不可以忽略的点。
19、就是这个观点,激起了千层浪花,许多人都认为他忽略了问题的关键所在。
20、这不是产生伪随机数的问题,也不是numpy的问题,问题的核心是在于PyTorch中的DataLoader的实现
21、对于包含随机转换的数据加载pipeline,这意味着每个worker都将选择“相同”的转换。而现在NN中的许多数据加载pipeline,都使用某种类型的随机转换来进行数据增强,所以不重新初始化可能是一个预设。
22、另一位网友也表示这个bug其实是在预设程序下运行才出现的,应该向更多用户指出来。
23、并且95%以上的Pytorch库受此困扰,也绝不是危言耸听。
24、有人就分享出了自己此前的惨痛经历:
25、我认识到这一点是之前跑了许多进程来创建数据集时,然而发现其中一半的数据是重复的,之后花了很长的时间才发现哪里出了问题。
26、也有用户补充说,如果 95%以上的用户使用时出现错误,那么代码就是错的。
27、顺便一提,这提供了Karpathy定律的另一个例子:即使你搞砸了一些非常基本代码,“neural nets want to work”。
28、如上的bug并不是偶然,随着用PyTorch的人越来越多,被发现的bug也就越来越多,某乎上还有PyTorch的坑之总结,被浏览量高达49w。
29、其中从向量、函数到model.train(),无论是真bug还是自己出了bug,大家的血泪史还真的是各有千秋。
30、所以,关于PyTorch你可以分享的经验血泪史吗?
31、[1]
32、[2]
33、[3]
三、ndarray是什么
ndarray是NumPy中的多维数组对象。
ndarray是Python中NumPy库的核心对象,它是多维数组的一种实现。NumPy提供的一个重要的工具就是ndarray,它是一个快速、灵活、强大的N维数组对象。相比于Python内置的列表,ndarray提供了大量的功能来支持高性能的数值和科学计算。
*多维性:ndarray可以表示一维、二维、三维等多维数组,适用于各种数据处理场景。
*固定类型:一旦创建了一个ndarray对象,其数据类型就是固定的,这有助于提高数据处理的效率。
*内存效率:ndarray在内存中是一块连续的区域,这使得对其元素进行索引和赋值操作非常快。
*丰富的函数库支持:NumPy提供了大量的函数来操作ndarray对象,如数学函数、统计函数等。
ndarray在科学计算和数据分析中非常常用。无论是机器学习、深度学习、图像处理还是金融数据分析,都需要处理大量的数值数据。ndarray能够提供高效的数据存储和计算方式,大大简化了这些领域的编程工作。
在Python中,可以使用NumPy库来创建ndarray对象。创建后,可以对其进行各种操作,如切片、排序、形状变换等。由于其强大的功能和高效的性能,ndarray成为了Python数据处理中不可或缺的一部分。
总结,ndarray是NumPy库中用于表示多维数组的对象,具有高效、灵活、强大的特点,广泛应用于科学计算和数据分析领域。