一个小时完成numpy入门(二)

numpy数组创建

下面将展示一些ndarray的构造函数

numpy.empty

这个构造函数将创造指定形状的空数组。它的构造函数如下:

numpy.empty(shape, dtype = float, order = 'C')
  • shape表示创建数组的形状
  • dtype表述数组内元素的数据类型
  • Order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组
例1
import numpy as np
a=np.empty([2,3],dtype=int)
print(a)
'''
输出为
[[ 648544432      32763  648548960]
 [     32763 1176174320        413]]
 因为是空所以输出int型随机数
'''

numpy.zeros

该构造函数构造全为0的数组,其构造函数如下

numpy.zeros(shape, dtype = float, order = 'C')
例1
import numpy as np
a=np.zeros([2,3],dtype=int)
print(a)
'''
输出为
[[0 0 0]
 [0 0 0]]
'''
例2
#也可以自定义dtype
import numpy as np
a=np.zeros((2,2),dtype=[('x','i1'),('y','f4')])
print(a)
'''
输出为:
[[(0, 0.) (0, 0.)]
 [(0, 0.) (0, 0.)]]
'''

numpy.ones

该构造器返回全为1的数组,其构造函数如下:

numpy.ones(shape, dtype = None, order = 'C')
例1
import numpy as np
a=np.ones((2,2),dtype=[('x','i1'),('y','f4')])
print(a)
'''
输出为
[[(1, 1.) (1, 1.)]
 [(1, 1.) (1, 1.)]]
'''

numpy-以现有数据创建数组

我们会在这一目题讨论如何使用一系列构造函数将现有数据构造为numpy的数组。

numpy.asarray

这个函数可以将任意的序列转换为数组,其构造函数如下:

numpy.asarray(a, dtype = None, order = None)
  • a 任意形式的输入参数,比如列表、列表的元组、元组、元组的元组、元组的列表
  • dtype 转化后数组的数据类型
  • order 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组
例1
import numpy as np
a=(1,2,3,4,5)
b=np.asarray(a,dtype=float)
print(b)
#输出为[1. 2. 3. 4. 5.]

numpy.frombuffer

这个函数将任意待处理的对象转化为一维数组。
它的构造函数如下

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
  • buffer 待处理的对象
  • dtype 返回数组的数据类型,默认为float
  • count 需要读取的数据数量,默认为-1,读取所有数据
  • offset 需要读取的起始位置,默认为0

FBI WARNING!
如果buffer的类型是字符串,那么需要在待处理字符串前面加上一个‘b’。因为Python3默认str是Unicode类型,所以要转成bytestring在原str前加上b。

例1
import numpy as np
s =b'wdnmd rush b'
a = np.frombuffer(s,dtype='S1')
print(a)
#输出为:[b'w' b'd' b'n' b'm' b'd' b' ' b'r' b'u' b's' b'h' b' ' b'b']

numpy-在给定的数值范围创建数组

我们将要学习如何在给定的数值范围之中创建数组

numpy.arange

与列表的构造函数range类似,其构造函数如下

numpy.arange(start, stop, step, dtype)
  • start 范围的起始值,默认为0
  • stop 范围的终止值(不包含)
  • step 两个值的间隔,默认为1
  • dtype 创建数组的数据类型,默认为输入数据的数据类型。
例1
import numpy as np
a=np.arange(1,5)
print(a)
#输出为[1,2,3,4]
例2
import numpy as np
a=np.arange(1,10,2,dtype='f4')
print(a)
#输出为[1. 3. 5. 7. 9.]

numpy.linspace

这个函数与arange类似,不过linspace是指定均匀间隔数量,而不是arange所指定的步长。其构造函数如下:

numpy.linspace(start, stop, num, endpoint, retstep, dtype)
  • start 序列的起始值
  • stop 序列的终止值
  • num 即处理后生成的数组元素数量,默认为50
  • endpoint 如果endpoint为true,则序列包括最后一个数,否则不包括。默认为true
  • retstep 如果为true,返回样例,以及连续数字之间的步长
  • dtype 转换后的数组的数据类型
例1
import numpy as np
a=np.linspace(0,10,5)
print(a)
#输出为[ 0.   2.5  5.   7.5 10. ]
例2
import numpy as np
a=np.linspace(0,10,5,endpoint=False)
print(a)
#输出为[0. 2. 4. 6. 8.]
例3
import numpy as np
a=np.linspace(0,10,5,endpoint=False,retstep=True)
print(a)
#输出为(array([0., 2., 4., 6., 8.]), 2.0)
#这说明步长为2.0

numpy.logspace

这个函数我认为是用来批量处理幂运算的。其构造函数如下:

numpy.logscale(start, stop, num, endpoint, base, dtype)
  • start 起始值是base ** start
  • stop 终止值是base ** stop
  • num 范围内的数值数量,默认为50
  • endpoint 如果为true,终止值包含在输出数组当中
  • base 对数空间的底数,默认为10
  • dtype 输出数组的数据类型,如果没有提供,则取决于其它参数
    在Python中‘*’代表乘法运算,而‘ ** ’则代表幂运算,如a**3代表a的三次方
import numpy as np
a=np.logspace(1,10,num=10,base=2,dtype='i4')
print(a)
#输出为[   2    4    8   16   32   64  128  256  512 1024]

江州司马青衫湿

一个小时完成numpy入门(二)一个小时完成numpy入门(二) 正在学Python的猛男小鞠 发布了30 篇原创文章 · 获赞 24 · 访问量 5163 私信 关注
上一篇:VS 2005的一个BUG及对其原因猜测


下一篇:numpy 创建数组