numpy到矩阵中不同元素的种类_NumPy简洁教程
介绍
我⾮常喜欢Python中的NumPy库。在我的数据科学之旅中,我⽆数次依赖它来完成各种任务,从基本的数学运算到使⽤它进⾏图像分类!
简⽽⾔之,NumPy是Python中最基本的库之⼀,也许是其中最有⽤的库。NumPy⾼效地处理⼤型数据集。 作为⼀名数据科学家或⼀名有抱负的数据科学专业⼈⼠,我们需要对NumPy及其在Python中的⼯作原理有⼀个扎实的掌握。
在本⽂中,我将⾸先描述⼀下NumPy库是什么,以及为什么你应该选择它⽽不是繁琐的Python列表。然后,我们将介绍⼀些最基本的NumPy操作,这些操作将使你喜欢这个很棒的库!
⽬录
NumPy库是什么?
Python列表与NumPy数组有什么区别?
创建NumPy数组基本的ndarray全零数组全⼀数组ndarray中的随机数定制的数组NumPy的Imatrix等间距的ndarray
NumPy数组的形状与重塑NumPy数组的维数NumPy数组的形状NumPy数组的⼤⼩重塑NumPy数组展开NumPy数组NumPy数组的转置
扩展和压缩⼀个NumPy数组展开NumPy数组压缩NumPy数组
NumPy数组的索引与切⽚⼀维数组的切⽚⼆维数组切⽚三维数组切⽚NumPy数组的负切⽚
堆叠和级联Numpy数组堆叠ndarrays级联ndarrays
Numpy数组⼴播
NumPy Ufuncs
⽤NumPy数组计算平均值、中位数和标准差最⼩最⼤值及其索引
在NumPy数组中排序
NumPy数组和图像
NumPy库是什么?
NumPy是Python数值库,是Python编程中最有⽤的科学库之⼀。它⽀持⼤型多维数组对象和各种⼯具。各种其他的库,如Pandas、Matplotlib和Scikit-learn,都建⽴在这个令⼈惊叹的库之上。
数组是元素/值的集合,可以有⼀个或多个维度。⼀维数组称为向量,⼆维数组称为矩阵。
NumPy数组称为ndarray或N维数组,它们存储相同类型和⼤⼩的元素。它以其⾼性能⽽闻名,并在数组规模不断扩⼤时提供⾼效的存储和数据操作。
下载Anaconda时,NumPy会预先安装。但是如果你想在你的机器上单独安装NumPy,只需在你的终端上键⼊以下命令:
pip install numpy
现在需要导⼊库:
import numpy as np
np实际上是数据科学界使⽤的NumPy的缩写。
Python列表与NumPy数组有什么区别?
如果你熟悉Python,你可能会想,既然我们已经有了Python列表,为什么还要使⽤NumPy数组?毕竟,这些Python列表充当⼀个数组,可以存储各种类型的元素。这是⼀个完全正确的问题,答案隐藏在Python在内存中存储对象的⽅式中。
Python对象实际上是⼀个指向内存位置的指针,该内存位置存储有关该对象的所有详细信息,如字节和值。尽管这些额外的信息使Python 成为⼀种动态类型语⾔,但它也付出了代价,这在存储⼤量对象(如在数组中)时变得显⽽易见。
Python列表本质上是⼀个指针数组,每个指针指向⼀个包含与元素相关信息的位置。这在内存和计算⽅⾯增加了很多开销。当列表中存储的所有对象都是同⼀类型时,⼤多数信息都是冗余的!
为了解决这个问题,我们使⽤只包含同构元素的NumPy数组,即具有相同数据类型的元素。这使得它在存储和操作数组⽅⾯更加⾼效。
当数组包含⼤量元素(⽐如数千或数百万个元素)时,这种差异就变得明显了。另外,使⽤NumPy数组,你可以执⾏元素操作,这是使⽤Python列表不可能做到的!
这就是为什么在对⼤量数据执⾏数学操作时,NumPy数组⽐Python列表更受欢迎的原因。
创建NumPy数组
基本的ndarray
考虑到NumPy数组解决的复杂问题,它很容易创建。要创建⼀个⾮常基本的ndarray,可以使⽤np.array()⽅法。你只需将数组的值作为列表传递:
np.array([1,2,3,4])
输出:
array([1, 2, 3, 4])
此数组包含整数值。可以在dtype参数中指定数据类型:
np.array([1,2,3,4],dtype=np.float32)
输出:
array([1., 2., 3., 4.], dtype=float32)
由于NumPy数组只能包含同构数据类型,因此如果类型不匹配,则将向上转换值:
np.array([1,2.0,3,4])
输出:
array([1., 2., 3., 4.])
在这⾥,NumPy将整数值上移到浮点值。
NumPy数组也可以是多维的。
np.array([[1,2,3,4],[5,6,7,8]])
array([[1, 2, 3, 4], [5, 6, 7, 8]])
在这⾥,我们创建了⼀个⼆维数组。
注:矩阵只是⼀个NxM形状的数字矩形数组,其中N是⾏数,M是矩阵中的列数。你刚才看到的是⼀个2x4矩阵。全零数组
NumPy允许你使⽤ np.zeros()⽅法。你只需传递所需数组的形状:
array([0., 0., 0., 0., 0.])
上⾯⼀个是⼀维数组,下⾯⼀个是⼆维数组:
array([[0., 0., 0.], [0., 0., 0.]])
全⼀数组
你还可以使⽤ np.ones()⽅法获得全⼀数组:
array([1, 1, 1, 1, 1])
ndarray中的随机数
创建ndarray的另⼀个⾮常常⽤的⽅法是随机随机数⽅法。它创建⼀个给定形状的数组,其随机值来⾃[0,1]:
# 随机的np.random.rand(2,3)
array([[0.95580785, 0.98378873, 0.65133872], [0.38330437, 0.16033608, 0.13826526]])
定制的数组
或者,实际上,可以使⽤ np.full()⽅法。只需传⼊所需数组的形状和所需的值:
np.full((2,2),7)
array([[7, 7], [7, 7]])
NumPy的Imatrix
另⼀个伟⼤的⽅法是np.eye()返回⼀个数组,其对⾓线上有1,其他地⽅都有0。
linspace numpy⼀个单位矩阵是⼀个正⽅形矩阵,它的主对⾓线上有1,其他地⽅都有0。下⾯是形状为3x 3的单位矩阵。
注:正⽅形矩阵是N x N的形状。这意味着它具有相同数量的⾏和列。
# 单位矩阵np.eye(3)
array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
但是,NumPy允许你灵活地更改对⾓线,值必须为1。你可以将其移到主对⾓线上⽅:
# 不是单位矩阵
<(3,k=1)
array([[0., 1., 0.], [0., 0., 1.], [0., 0., 0.]])
或将其移到主对⾓线下⽅:
<(3,k=-2)
array([[0., 0., 0.], [0., 0., 0.], [1., 0., 0.]])
注:只有当1沿主对⾓线⽽不是任何其他对⾓线时,矩阵才称为单位矩阵!
等间距的ndarray
你可以使⽤np.arange()⽅法:
np.arange(5)
array([0, 1, 2, 3, 4])
通过分别传递三个数字作为这些值的参数,可以显式定义值间隔的开始、结束和步长。这⾥要注意的⼀点是,间隔定义为[开始,结束),其中最后⼀个数字将不包含在数组中:
np.arange(2,10,2)
array([2, 4, 6, 8])
由于步长定义为2,因此下图展⽰了输出的元素。注意,10不会打印出来,因为它是最后⼀个元素。
另⼀个类似的功能是 np.linspace(),但它将从间隔中获取需要检索的样本数,⽽不是步长。这⾥要注意的⼀点是,最后⼀个数字包含在返回的值中,这与np.arange()不同
np.linspace(0,1,5)
array([0. , 0.25, 0.5 , 0.75, 1. ])
太好了!现在你知道了如何使⽤NumPy创建数组。但了解数组的形状也很重要。
NumPy数组的形状与重塑
创建了ndarray之后,接下来要做的是检查ndarray的轴数、形状和⼤⼩。
NumPy数组的维数
可以使⽤ndims属性轻松确定NumPy数组的维数或轴数:
# 轴数a = np.array([[5,10,15],[20,25,20]])print('Array :','',a)print('Dimensions :','',a.ndim)
Array : [[ 5 10 15] [20 25 20]]Dimensions : 2
这个数组有两个维度:2⾏3列。
NumPy数组的形状
形状是NumPy数组的⼀个属性,它显⽰每个维度上有多少⾏元素。你可以进⼀步索引ndarray返回的形状,以便沿每个维度获取值:a = np.array([[1,2,3],[4,5,6]])print('Array :','',a)print('Shape :','',a.shape)print('Rows = ',a.shape[0])print('Columns = ',a.shape[1])
Array : [[1 2 3] [4 5 6]]Shape : (2, 3)Rows = 2Columns = 3
NumPy数组的⼤⼩
可以使⽤size属性确定数组中有多少值。它只是将⾏数乘以ndarray中的列数:
# size of arraya = np.array([[5,10,15],[20,25,20]])print('Size of array :',a.size)print('Manual determination of size of array :',a.shape[0]*a.shape[1]) Size of array : 6Manual determination of size of array : 6
重塑NumPy数组
可以使⽤np.reshape()⽅法。它在不更改ndarray中的数据的情况下更改ndarray的形状:
# 重塑a = np.array([3,6,9,12])np.reshape(a,(2,2))
array([[ 3, 6], [ 9, 12]])
在这⾥,我将ndarray从⼀维重塑为⼆维ndarray。
重塑时,如果你不确定任何轴的形状,只需输⼊-1。当NumPy看到-1时,它会⾃动计算形状:
a = np.array([3,6,9,12,18,24])print('Three rows :','',np.reshape(a,(3,-1)))print('Three columns :','',np.reshape(a,(-1,3)))
Three rows : [[ 3 6] [ 9 12] [18 24]]Three columns : [[ 3 6 9] [12 18 24]]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论