1. 蛮力构造法
1
|
np.array( object , dtype = None , copy = True , order = None , subok = False , ndmin = 0 ) |
1
2
3
4
5
6
|
import numpy as np # 如果不指定数据类型,就会根据object参数自动选择合适的数据类型 a = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) # 也可以在创建数组时,指定元素的数据类型 b = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]], dtype = np.uint8) |
2. 特殊数值法
这里的特殊数值指的是0、1、空值。特殊数值法适合构造全0、全1、空数组,或由0、1组成的类似单位矩阵(主对角线为1,其余为0)的数组。
1
2
3
4
|
np.zeros(shape, dtype = float , order = 'C' ) np.ones(shape, dtype = float , order = 'C' ) np.empty(shape, dtype = float , order = 'C' ) np.eye(N, M = None , k = 0 , dtype = float , order = 'C' ) |
固定参数shape表示生成的数组结构,默认参数dtype用于指定数据类型(默认浮点型)。order参数指定的是数组在内存中的存储顺序,'C'
表示C语言使用的行为优先方式,'F'
表示Fortran语言使用的列优先方式
1
2
3
4
5
6
7
|
import numpy as np print (np.zeros( 6 )) print (np.zeros(( 2 , 3 ))) print (np.ones(( 2 , 3 ), dtype = int )) print (np.empty(( 2 , 3 ))) print (np.eye( 3 , dtype = np.uint8)) |
如果需要一个3行4列,初始值都是255的无符号整型数组
- 方案1:全1数组乘以255
- 方案2:全0数组加255
-
方案3:使用填充函数
fill()
1
2
3
4
5
|
import numpy as np a = np.empty(( 3 , 4 ), dtype = np.uint8) a.fill( 255 ) print (a) |
3. 随机数值法
1
2
3
|
np.random.random(size = None ) np.random.randint(low, high = None , size = None ) np.random.normal(loc = 0.0 , scale = 1.0 , size = None ) |
random()
函数用于生成[0,1)
区间内的随机浮点型整数,randint()
函数用于生成[low,high)
区间内的随机整形数组。参数size是一个元组,用于指定生成数组的结构
1
2
3
4
5
6
|
import numpy as np print (np.random.random( 3 )) print (np.random.random(( 2 , 3 ))) print (np.random.randint( 5 )) print (np.random.randint( 1 , 5 , size = ( 2 , 3 ))) |
normal()
函数用于生成以loc为均值、以scale为标准差的正态分布数组。
1
2
3
4
5
6
7
8
9
10
11
12
|
import numpy as np # 导入绘图模块 import matplotlib.pyplot as plt # 生成正态分布数据 tall = np.random.normal( 170 , 4 , 1000 ) # 从156厘米到190厘米,每2厘米一个分段 bins = np.arange( 156 , 190 , 2 ) # 绘制柱状图 plt.hist(tall, bins) # 显示图形 plt.show() |
4. 定长分割法
1
2
3
4
|
import numpy as np np.arange(start, stop, step, dtype = None ) np.linspace(start, stop, num = 50 , endpoint = True , retstep = False , dtype = None ) |
arange()
函数和Python的range()
函数用法相同,并且还可以接收浮点型参数
1
2
3
4
5
6
7
|
import numpy as np print (np.arange( 5 )) print (np.arange( 5 , 11 )) print (np.arange( 5 , 11 , 2 )) print (np.arange( 5.5 , 11 , 1.5 )) print (np.arange( 3 , 15 ).reshape( 3 , 4 )) |
linspace()
函数需要3个参数:一个起点、一个终点、一个返回元素的个数。linspace()
函数返回的元素包括起点和终点,可以通过endpoint
参数选择是否包含终点
1
2
3
4
5
6
|
import numpy as np # 返回0到5之间的5个等距数值,包括0和5 print (np.linspace( 0 , 5 , 5 )) # 返回5个等距数值,包括0但不包括5 print (np.linspace( 0 , 5 , 5 , endpoint = False )) |
5. 重复构造法
repeat()
函数用来重复数组元素。但如果被重复的数组是一个多维数组,且repeat()
函数指定了axis
参数,情况就会变得有些复杂
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np a = np.arange( 5 ) print (a) # 重复一维数组元素3次 print (np.repeat(a, 3 )) a = np.arange( 6 ).reshape(( 2 , 3 )) print (a) # 重复二维数组元素3次,不指定轴 print (np.repeat(a, 3 )) # 重复二维数组元素3次,指定0轴 print (np.repeat(a, 3 , axis = 0 )) # 重复二维数组元素3次,指定1轴 print (np.repeat(a, 3 , axis = 1 )) |
tile()
将整个数组而非数组元素水平和垂直重复指定的次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np a = np.arange( 5 ) print (a) # 重复一维数组3次 print (np.tile(a, 3 )) # 重复一维数组3行2列 print (np.tile(a, ( 3 , 2 ))) a = np.arange( 6 ).reshape(( 2 , 3 )) print (a) # 重复二维数组3次 print (np.tile(a, 3 )) # 重复二维数组2行3列 print (np.tile(a, ( 2 , 3 ))) |
6. 网格构造法
用数组表示经纬度网格方式一:用两个一维数组表示。使用定长分隔函数linspace()
,将经度从-180°
到180°
分为间隔为10°
的37个点,将纬度从90°
到-90
分为间隔为10°
的19个点,得到两个一维数组
1
2
3
4
5
6
|
import numpy as np # 精度为10°,共计37个经度点 lon = np.linspace( - 180 , 180 , 37 ) # 精度为10°,共计19个纬度点 lat = np.linspace( 90 , - 90 , 19 ) |
用数组表示经纬度网格方式二:用两个二维数组分别表示经度网格和纬度网格。经度网格中每一列的元素都是相同的(同一个经度),纬度网格中每一行的元素都是相同的(同一个纬度)。生成二维经纬度网格的常用函数是np.meshgrid()
,该函数以一维经度数组lon和一维纬度数组lat为参数,返回二维的经度数组和纬度数组
1
2
3
4
5
6
7
8
9
10
11
12
|
import numpy as np # 精度为10°,共计37个经度点 lon = np.linspace( - 180 , 180 , 37 ) # 精度为10°,共计19个纬度点 lat = np.linspace( 90 , - 90 , 19 ) lons, lats = np.meshgrid(lon, lat) print (lons.shape) print (lats.shape) print (lons[:, 0 ]) print (lons[ 0 ]) |
构造经纬度网格,除了使用np.meshgrid()
函数外,还有一个更强大的方法,这个方法可以直接生成纬度网格和经度网格而无需借助于一维数组(请注意,纬度在前,经度在后)
1
2
3
4
5
6
7
8
|
import numpy as np # 使用实数指定网格经度为5° lats, lons = np.mgrid[ 90 : - 91 : - 5 , - 180 : 181 : 5 ] print (lons.shape, lats.shape) # 也可以用虚数指定分隔点数 lats, lons = np.mgrid[ 90 : - 90 : 37j , - 180 : 180 : 73j ] print (lons.shape, lats.shape) |
7. 自定义数据类型
结果显示:数组会将所有元素的数据类型都转为'<U32'
类型。这里的U标识Unicode字符串;<
表示字节顺序,意为小端在前(低位字节存储在最小地址中);32表示数组元素占用32字节,数组元素占用的字节数由所有元素中最长的那个元素决定
1
2
3
|
import numpy as np print (np.array([ 'Anne' , 1.70 , 55 ]).dtype) |
怎样在数组中保留用以生成数组的列表中的元素类型呢?这就需要用到自定义数据类型了。自定义数据类型类似于C语言的结构体,
其代码如下:
1
2
3
4
|
import numpy as np mytype = np.dtype([( 'name' , 'S32' ), ( 'tall' , np. float ), ( 'bw' , np. int )]) print (np.array([( 'Anne' , 1.70 , 55 )], dtype = mytype)) |
原文链接:https://blog.csdn.net/feizuiku0116/article/details/126705818