内容简介:这篇文章主要介绍了NumPy 如何生成多维数组的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Python现在是最热门的人工智能语言,各种 工具 的支持如Google的Tensorflow,都是首选支持 Python 的。
但是,与R语言不同,Python语言设计时,并没有考虑对于矩阵运算,统计计算等功能做专项支持。于是我们需要NumPy库来补足这一能力上的不足。
NumPy是Python的著名扩展库,相当于Python中的MATLAB。
Numpy 中,ndarray 类具有六个参数,它们分别为:
- shape:数组的形状。
- dtype:数据类型。
- buffer:对象暴露缓冲区接口。
- offset:数组数据的偏移量。
- strides:数据步长。
- order:{'C','F'},以行或列为主排列顺序。
如何生成多维数组
初识ndarray多维数组
在算法中我们最经常用到的就是矩阵,我们就从矩阵开始说起吧。
NumPy中,使用二维的多维数组ndarray来存储矩阵。
例:
a3 = np.array([[1,0],[0,1]])
会生成这样一个多维数组对象
array([[1, 0], [0, 1]])
生成数组序列
通过开始值、结束值和步长值生成数组序列 - arange
可以通过arange函数来生成指定开始值,结束值和步长值的一维数组。请注意,结束值并不包含在序列中,也就是说结束值是开区间。
In [25]: a4 = np.arange(1,10,1) In [26]: a4 Out[26]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
线性序列 - linspace
与arange类似,linspace通过给定初值、终值和元素个数来生成序列。是否包含终值可以通过endpoint属性来设置。
例:
In [37]: a8 = np.linspace(1,10,10,endpoint=True) In [38]: a8 Out[38]: array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
等比序列 - logspace
除了线性的等差数列,我们也可以通过等比数列的方式来生成一维数组。
默认是以10的n次方为参数,比如logspace(0,4,3)的意思是,初值为10的0次方,即1,终值是10的4次方,即100,一共生成3个值。
例,生成[1,100,10000]
In [47]: a9 = np.logspace(0,4,3) In [48]: a9 Out[48]: array([ 1.00000000e+00, 1.00000000e+02, 1.00000000e+04])
我们当然也可以修改基数,比如改成3:
In [53]: a10 = np.logspace(1,5,3,base=3) In [54]: a10 Out[54]: array([ 3., 27., 243.])
改变多维数组的形状
如果有一个一维数组要转为多维数组,可以通过修改shape属性来实现。
我们可以先将数据存在一维数组中,可以用列表或者元组来生成一维数组,它们是等价的:
例:
In [2]: a1 = np.array([1,2,3,4]) In [3]: a1 Out[3]: array([1, 2, 3, 4]) In [4]: a2 = np.array((1,0,0,1)) In [5]: a2 Out[5]: array([1, 0, 0, 1])
我们通过shape属性来查看一个数组的形状:
In [14]: a1.shape Out[14]: (4,) In [15]: a2.shape Out[15]: (4,)
shape属性是可以直接修改的,比如我们想把上面的a1改成2 x 2的矩阵,就直接改shape值就是了:
In [16]: a1.shape = 2,2 In [17]: a1 Out[17]: array([[1, 2], [3, 4]])
如果能确定一个轴,另一个可以赋-1让系统自己去算。
例:
In [18]: a2.shape= 2,-1 In [19]: a2 Out[19]: array([[1, 0], [0, 1]])
如果想保持这个数组不变,生成一个形状改变的新数组,可以调用reshape方法。
例:我们将一个25个元素的数组生成一个5x5的新数组
In [59]: a11 = np.linspace(1,100,25) In [60]: a11 Out[60]: array([ 1. , 5.125, 9.25 , 13.375, 17.5 , 21.625, 25.75 , 29.875, 34. , 38.125, 42.25 , 46.375, 50.5 , 54.625, 58.75 , 62.875, 67. , 71.125, 75.25 , 79.375, 83.5 , 87.625, 91.75 , 95.875, 100. ]) In [61]: a12 = a11.reshape(5,-1) In [62]: a12 Out[62]: array([[ 1. , 5.125, 9.25 , 13.375, 17.5 ], [ 21.625, 25.75 , 29.875, 34. , 38.125], [ 42.25 , 46.375, 50.5 , 54.625, 58.75 ], [ 62.875, 67. , 71.125, 75.25 , 79.375], [ 83.5 , 87.625, 91.75 , 95.875, 100. ]])
直接生成多维数组
生成全0的数组
zeros生成全是0的数组,第一个参数是shape
例:
In [65]: np.zeros((10,10)) Out[65]: array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
生成全是1的数组
例:
In [66]: np.ones((5,5)) Out[66]: array([[ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1.]])
只生成空数组
empty不赋初值,是最快速的方法
例:
In [67]: np.empty((3,3)) Out[67]: array([[ 1. , 2.125, 3.25 ], [ 4.375, 5.5 , 6.625], [ 7.75 , 8.875, 10. ]])
通过函数来生成数组
通过fromfunction函数可以通过一个函数来生成想要的数组。
例,生成九九乘法表:
In [125]: def mul2(x,y): ...: return (x+1)*(y+1) ...: In [126]: np.fromfunction(mul2,(9,9)) Out[126]: array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.], [ 2., 4., 6., 8., 10., 12., 14., 16., 18.], [ 3., 6., 9., 12., 15., 18., 21., 24., 27.], [ 4., 8., 12., 16., 20., 24., 28., 32., 36.], [ 5., 10., 15., 20., 25., 30., 35., 40., 45.], [ 6., 12., 18., 24., 30., 36., 42., 48., 54.], [ 7., 14., 21., 28., 35., 42., 49., 56., 63.], [ 8., 16., 24., 32., 40., 48., 56., 64., 72.], [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
以上所述就是小编给大家介绍的《NumPy 如何生成多维数组的方法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- C语言指针数组和数组指针
- 数组 – 如何在Swift中将数组拆分成两半?
- 菜鸡的算法修炼:数组(旋转数组的最小数字)
- 交换数组元素,使得数组的和的差最小
- JS数组专题1️⃣ ➖ 数组扁平化
- 算法-计算小数组在大数组中的索引
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms on Strings, Trees and Sequences
Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99
String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!