6. Numpy创建数组
1.前言
在《NumPy Ndarray对象》一节,介绍了创建 ndarray 数组的基本方法,除了使用 array() 方法外,NumPy 还提供了其他创建 ndarray 数组的方法。本节对这些常用方法做简单介绍。
2. numpy.empty()
numpy.empty() 创建未初始化的数组,可以指定创建数组的形状(shape)和数据类型(dtype),语法格式如下:
numpy.empty(shape, dtype = float, order = 'C')
它接受以下参数:
- shape:指定数组的形状;
- dtype:数组元素的数据类型,默认值是值 float;
- order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
使用示例如下:
import numpy as np arr = np.empty((3,2), dtype = int) print(arr)
输出结果:
[[2003134838 175335712] [ 538976288 538976288] [1970562418 1684369010]]
可以看到,numpy.empty() 返回的数组带有随机值,但这些数值并没有实际意义。切记 empty 并非创建空数组。
3. numpy.zeros()
该函数用来创建元素均为 0 的数组,同时还可以指定被数组的形状,语法格式如下:
numpy. zeros(shape,dtype=float,order="C")
参数名称 | 说明描述 |
---|---|
shape | 指定数组的形状大小。 |
dtype | 可选项,数组的数据类型 |
order | “C”代表以行顺序存储,“F”则表示以列顺序存储 |
示例如下:
import numpy as np #默认数据类型为浮点数 a=np.zeros(6) print(a) b=np.zeros(6,dtype="complex64" ) print(b)
输出结果:
#a数组 [0. 0. 0. 0. 0. 0.] #b数组 [0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
也可以使用自定义的数据类型创建数组,如下所示:
c = np.zeros((3,3), dtype = [('x', 'i4'), ('y', 'i4')]) print(c) #输出x,y,并指定的数据类型 [[(0, 0) (0, 0) (0, 0)] [(0, 0) (0, 0) (0, 0)] [(0, 0) (0, 0) (0, 0)]]
4. numpy.ones()
返回指定形状大小与数据类型的新数组,并且新数组中每项元素均用 1 填充,语法格式如下:
numpy.ones(shape, dtype = None, order = 'C')
示例如下:
import numpy as np arr1 = np.ones((3,2), dtype = int) print(arr1)
输出结果如下:
[[1 1] [1 1] [1 1]]
下面介绍如何使用 Python 列表、流对象、可迭代对象来创建一个 NumPy 数组。
5. numpy.asarray()
asarray() 与 array() 类似,但是它比 array() 更为简单。asarray() 能够将一个 Python 序列转化为 ndarray 对象,语法格式如下:
numpy.asarray(sequence,dtype = None ,order = None )
它接受下列参数:
- sequence:接受一个 Python 序列,可以是列表或者元组;
- dtype:可选参数,数组的数据类型;
- order:数组内存布局样式,可以设置为 C 或者 F,默认是 C。
示例 1,将列表转化为 numpy 数组:
import numpy as np l=[1,2,3,4,5,6,7] a = np.asarray(l); print(type(a)) print(a)
输出结果如下所示:
#a数组类型 <class 'numpy.ndarray'> #a数组 [1 2 3 4 5 6 7]
示例 2,使用元组创建 numpy 数组:
import numpy as np l=(1,2,3,4,5,6,7) a = np.asarray(l); print(type(a)) print(a)
输出结果如下:
<class 'numpy.ndarray'> [1 2 3 4 5 6 7]
示例 3,使用嵌套列表创建多维数组:
import numpy as np l=[[1,2,3,4,5,6,7],[8,9]] a = np.asarray(l); print(type(a)) print(a)
输出结果:
<class 'numpy.ndarray'> [list([1, 2, 3, 4, 5, 6, 7]) list([8, 9])]
6. numpy.frombuffer()
表示使用指定的缓冲区创建数组。下面给出了该函数的语法格式:
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
它的参数说明如下所示:
- buffer:将任意对象转换为流的形式读入缓冲区;
- dtype:返回数组的数据类型,默认是 float32;
- count:要读取的数据数量,默认为 -1 表示读取所有数据;
- offset:读取数据的起始位置,默认为 0。
示例 4 如下:
import numpy as np #字节串类型 l = b'hello world' print(type(l)) a = np.frombuffer(l, dtype = "S1") print(a) print(type(a))
输出结果如下:
<class 'bytes'> [b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd'] <class 'numpy.ndarray'>
7. numpy.fromiter()
该方法可以把迭代对象转换为 ndarray 数组,其返回值是一个一维数组。
numpy.fromiter(iterable, dtype, count = -1)
参数说明如下:
参数名称 | 描述说明 |
---|---|
iterable | 可迭代对象。 |
dtype | 返回数组的数据类型。 |
count | 读取的数据数量,默认为 -1,读取所有数据。 |
示例5:使用内置 range() 函数创建列表对象,然后使用迭代器创建 ndarray 对象,代码如下:
import numpy as np # 使用 range 函数创建列表对象 list=range(6) #生成可迭代对象i i=iter(list) #使用i迭代器,通过fromiter方法创建ndarray array=np.fromiter(i, dtype=float) print(array)
输出结果:
[0. 1. 2. 3. 4. 5.]