文章目录
NumPy创建数组的五种方式
学习链接:https://www.numpy.org.cn/user/basics/creation.html
- 从其他Python结构(比如,列表、元组)转换
- numpy原生数组的创建,比如arange、ones、zeros等
- 从磁盘读取数据,无论是标准格式还是自定义格式
- 通过使用字符串或缓冲区从原始字节创建数组
- 使用特殊库函数,比如random
在此只介绍前两个。
将Python array-like对象转换为Numpy数组
-
通常,在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组。主要是列表和元组。
-
例子:
import numpy as np array1 = np.array([1,2,3,4]) # 将列表转换为数组 array2 = np.array([1, 2, 3, 4]) array3 = np.array([[1,2.0],[0,0],(1+1j,3.)]) # 将列表和元组转换为数组(mix of list and tuple) array4 = np.array([[1.+0.j,2.+0.j],[0.+0.j,0.+0.j],[1.+1.j,3.+0.j]]) ''' array1和array2均为: array([1, 2, 3, 4]) array3: array([[1.+0.j, 2.+0.j], [0.+0.j, 0.+0.j], [1.+1.j, 3.+0.j]]) array4: array([[1.+0.j, 2.+0.j], [0.+0.j, 0.+0.j], [1.+1.j, 3.+0.j]]) '''
Numpy原生数组的创建
np.zeros(shape)
-
zeros(shape)将创建一个以指定形状用0填充的数组。默认的dtype是float64。
import numpy as np array = np.zeros((2,3)) '''array: array([[1,2,3],[4,5,6]]) '''
np.ones(shape)
-
ones(shape)将创建一个以指定形状用1填充的数组。其他方面与zeros相同。
import numpy as np array = np.ones((2,3)) '''array: array([[1., 1., 1.], [1., 1., 1.]]) '''
np.arange()
-
arange()将创建一个有规律递增或递减的数组。
array1 = np.arange(10) # 默认数据类型为int32 array2 = np.arange(2,10,dtype=np.float) array3 = np.arange(0,11,2) array4 = np.arange(10,0,-2) '''输出结果 array1: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) array2: array([2., 3., 4., 5., 6., 7., 8., 9.]) array3: array([ 0, 2, 4, 6, 8, 10]) array4: array([10, 8, 6, 4, 2])'''
np.arange()函数:
- 一个参数时:np.arange(a),返回一个在区间[0, a)内递增的数组,步长为默认值1。
- 两个参数时:np.arange(a,b),返回一个在区间[a, b)内递增的数组,步长为默认值1。
- 三个参数时:np.arange(a,b,c),返回一个在区间[a, b)内递增的数组,步长为c。
np.linspace()
-
linspace()将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。
array1 = np.linspace(1.,4.,6) # array1:array([1. , 1.6, 2.2, 2.8, 3.4, 4. ]) array2 = np.linspace(1.,4.,6,endpoint=True) # array2:array([1. , 1.6, 2.2, 2.8, 3.4, 4. ]) array3 = np.linspace(1.,4.,6,endpoint=False) # array3:array([1. , 1.5, 2. , 2.5, 3. , 3.5]) # 可以理解为在区间[1., 4.]之间均匀分为7(即num+1)个数据,删除4.返回前六个数据构成的数组。
np.linspace()函数:
- 语法:np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
- 返回在 [start, stop] 之间均匀间隔的数据
- start、stop分别表示开始值和结束值
- num:生成数组的元素数量,默认为50
- endpoint:True则包含stop;False则不包含stop。默认endpoint=True
- retstep:即如果为True则结果会给出数据间隔)
- dtype:输出数组类型
- axis:0(默认)或-1
np.indices()
-
indices()返回一个给定形状数组的序号网格索引数组,可以用于提取数组元素或对数组进行切片使用。
- 语法:np.indices(dimensions, dtype, sparse=False)
- dimensions:网格的形状(整数序列)
- dtype:数据类型
- sparse:返回网格的稀疏表示,而不是密集表示。默认值是False。
- sparse=False时,返回一个网格索引数组grid.shape = (len(dimensions), ) + tuple(dimensions)。
- sparse=True时,返回数组的元素
import numpy as np x = np.arange(20).reshape((5,4)) dense_grid = np.indices((2,3)) #返回一个2x3网格序列,密集分布,每个行号和列号一一对应,表示一个位置的元素。 sparse_grid = np.indices((2,3),sparse= True) #返回一个松散排布的2x3网格的行分布和列分布元组,行号和列号不是一一对应,一个行号对应多个列号。 # 显示错误:indices() got an unexpected keyword argument 'sparse' # 原因可能是numpy版本问题,待更新后再尝试 print("x:\n",x) print("x.shape:",x.shape)
参考文章:
https://blog.csdn.net/daimashiren/article/details/111127432
https://vimsky.com/examples/usage/numpy-indices-function-python.html
创建数组时,指定数组元素的类型
-
创建数组时,通过dtype指定数组元素的类型
-
astype:可以更改当前数组的数据类型
import numpy as np x = np.array([1,2,3,4,5],dtype=np.float32) print(x) # [1. 2. 3. 4. 5.] print(x.dtype) # float32 print(x*2) # [ 2. 4. 6. 8. 10.] y = np.array([1,2,3,4,5]) y_asarray = np.asarray(y,dtype=np.float32) print(y_asarray) # [1. 2. 3. 4. 5.] print(y) # [1 2 3 4 5] # np.array与np.asarray,dtype不匹配,所以复制该数组(y) # astype更改当前数据类型,比如将int改为float32 y1 = np.array([1,2,3,4,5],dtype=int) y2 = y1.astype(np.float32) print(y1) # [1 2 3 4 5] print(y2) # [1. 2. 3. 4. 5.]