1.使用 np.array() 创建
-
使用 np.array() 由 python list 创建
n = np.array(list)
-
注意
-
numpy 默认 ndarray 的所有元素的类型是相同的
-
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str > float > int
-
ndarray 的常见数据类型:
-
int:int8、uint8、int16、int32、int64
-
float:float16、float32、float64
-
str:字符串
-
-
l = [1,4,2,3,5,6]
n = np.array(l)
n
# 执行结果
array([1, 4, 2, 3, 5, 6])
# 类型
type(n)
# 执行结果
numpy.ndarray
# 形状
n.shape
# l.shape # 列表没有shape
# 执行结果
(6,)
# 优先级:str > float > int
# n = np.array([3.14,2])
n = np.array([3.14,2,"hello"])
n
# 执行结果
array(['3.14', '2', 'hello'], dtype='<U32')
2.使用 np 的常规函数创建
(1)np.ones(shape,dtype=None,order='C')
-
创建一个所有元素为1的多维数组
-
参数说明:
-
shape:形状
-
dtpye=None:元素类型
-
order:{'C','F'},可选,默认值:C 是否在内存总以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认即可
-
n = np.ones(shape=(3,))
n
# 执行结果
array([1., 1., 1.])
n = np.ones(shape=(3,4))
n
# 执行结果
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
n = np.ones(shape=(3,4),dtype=np.int16)
n
# 执行结果
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]], dtype=int16)
n = np.ones(shape=(3,4,5),dtype=np.int16)
n
# 执行结果
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],
[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],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]]], dtype=int16)
(2)np.zeros(shape,dtype=float,order='C')
-
创建一个所有元素读为0的多维数组
-
参数说明
-
shape:形状
-
dtype=None:元素形状
-
n = np.zeros((5,5),dtype=np.int16)
n
# 执行结果
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]], dtype=int16)
(3)np.full(shape,full_value,dtype=None,order='C')
-
创建一个所有元素都为指定元素的多维数组
-
参数说明:
-
shape:形状
-
fill_value:填充值
-
dtype=None:元素类型
-
n = np.full(shape=(3,4),fill_value=8,dtype=np.int16)
n
# 执行结果
array([[8, 8, 8, 8],
[8, 8, 8, 8],
[8, 8, 8, 8]], dtype=int16)
(4)np.eye(N,M=None,k=0,dtype=float)
-
对角线为1其他的位置为0的二维数组
-
参数说明:
-
N:行数
-
M:列数,默认为None,表示和行数一样
-
k=0:向右偏移0个位置
-
dtype=None:元素类型
-
# 对角线为1其他的位置为0的二维数组
# 单位矩阵:主对角线都是1,其他都是0
n = np.eye(6)
n
# 执行结果
array([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
n = np.eye(6,6)
n
# 执行结果
array([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
n = np.eye(6,9,dtype=np.int8)
n
# 执行结果
array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0]], dtype=int8)
# k=2:向右偏移2个位置
n = np.eye(6,6,k=2,dtype=np.int8)
n
#执行结果
array([[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]], dtype=int8)
# k=-2:向左偏移2个位置
n = np.eye(6,6,k=-2,dtype=np.int8)
n
# 执行结果
array([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0]], dtype=int8)
(5)np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
-
创建一个等差数列
-
参数说明:
-
start:开始值
-
stop:结束值
-
num=50:等差数列中默认有50个数
-
endpoint=True:是否包含结束值
-
retstep=False:是否返回等差值(步长)
-
dtype=None:元素类型
-
# 等差数列:1,3,5,7,9......
n = np.linspace(1,99,num=50,dtype=np.int16)
n
# 执行结果
array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,
35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67,
69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99],
dtype=int16)
# 不包含结束值
n = np.linspace(1,99,num=50,dtype=np.int16,endpoint=False)
n
# 执行结果
array([ 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
34, 36, 38, 40, 42, 44, 46, 48, 50, 51, 53, 55, 57, 59, 61, 63, 65,
67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97],
dtype=int16)
# retstep=True:显示步长
n = np.linspace(1,99,num=50,dtype=np.int16,retstep=True)
n
# 执行结果
(array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33,
35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67,
69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99],
dtype=int16),
2.0)
(6)np.arange([start,]stop,[step,]dtype=None)
-
创建一个数值范围的数组
-
和 Python 中 range 功能类型
-
参数说明:
-
start:开始值(可选)
-
stop:结束值(不包含)
-
step:步长(可选)
-
dtype=None:元素类型
-
# 不包含结束值
n = np.arange(10)
n
# 执行结果
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 设置开始值
n = np.arange(2,10)
n
# 执行结果
array([2, 3, 4, 5, 6, 7, 8, 9])
# 设置步长
n = np.arange(2,10,2)
n
# 执行结果
array([2, 4, 6, 8])
(7)np.random.randint(low,high=None,size=None,dtype='I')
-
创建一个随机整数的多维数组
-
参数说明:
-
low:最小值
-
high=None:最大值
-
high=None时,生成的数值在【0,low)区间内
-
如果使用high这个值,则生成的数值在【low,high)区间
-
-
size=None:数组形状,默认只输出一个随机数
-
dtype=None:元素类型b
-
# 随机整数,范围:[0,3)
n = np.random.randint(3)
n
# 执行结果
2
# 随机整数,范围:[3,10)
n = np.random.randint(3,10)
n
# 执行结果
7
# 随机整数:一维数组
n = np.random.randint(3,10,size=6)
n
# 执行结果
array([3, 9, 9, 9, 3, 5])
# 随机整数:二维数组
n = np.random.randint(3,10,size=(3,4))
n
# 执行结果
array([[6, 6, 4, 7],
[7, 8, 3, 7],
[5, 9, 7, 6]])
# 随机整数:三维数组
n = np.random.randint(3,10,size=(3,4,5))
n
# 执行结果
array([[[3, 6, 8, 6, 3],
[3, 5, 3, 5, 9],
[5, 7, 5, 6, 8],
[5, 5, 5, 9, 9]],
[[5, 5, 3, 6, 9],
[8, 8, 7, 8, 9],
[6, 5, 7, 5, 3],
[8, 5, 3, 4, 8]],
[[5, 7, 3, 3, 8],
[5, 9, 9, 9, 4],
[3, 6, 3, 4, 9],
[5, 7, 7, 4, 5]]])
# 随机整数:三维数组
n = np.random.randint(0,256,size=(20,40,3))
n
plt.imshow(n)
# 执行结果
<matplotlib.image.AxesImage at 0x19507854a90>
(8)np.random.randn(d0,d1,...,dn)
-
创建一个服从标准正态分布的多维数组
-
标准正态分布又称为 u 分布,是以 0 为均数,以 1 为标准差的正态分布,记为 N(0,1)标准正态分布,在 0 左右出现的概率最大,越远离出现的概率越低
-
-
创建一个所有元素为 1 的多维数组
-
参数说明:
-
dn:第 n 个维度的数值
-
n = np.random.randn()
n
# 执行结果
-0.3152803212777383
n = np.random.randn(10)
n
# 执行结果
array([-1.08674923, -0.84266234, 0.48315194, -0.27384792, -0.22261324,
0.35111371, 1.63799966, -0.74853446, 0.52026937, 0.03269324])
n = np.random.randn(3,4)
n
# 执行结果
array([[ 0.05467138, 0.71906585, 1.71433002, 0.68904993],
[-1.17094149, -0.95344073, 0.76602977, -1.22046271],
[ 1.45891993, 1.40378872, -0.89364469, -1.29611593]])
(9)np.random.normal(loc=0.0,scale=1.0,size=None)
-
创建一个服从正态分布的多维数组
-
参数说明:
-
loc=0.0:均值,对应着正态分布的中心
-
scale:标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦
-
size=None:数组形状
-
n = np.random.normal(loc=100)
n
# 执行结果
98.54896577995035
n = np.random.normal(loc=100,scale=10)
n
# 执行结果
109.93226548891414
n = np.random.normal(loc=100,scale=10,size=(3,4))
n
# 执行结果
array([[106.55863188, 99.7947272 , 92.6754544 , 83.47585069],
[104.12500667, 109.83623019, 96.68665303, 96.47597136],
[ 90.24713131, 90.28364275, 93.38309007, 83.58287443]])
(10)np.random.random(size=None)
-
创建一个元素为 0-1(左闭右开)的随机数的多维数组
-
参数说明:
-
size=None:数组形状
-
n = np.random.random()
n
# 执行结果
0.31199272530455857
n = np.random.random(size=(3,4))
n
# 执行结果
array([[0.08444408, 0.07450235, 0.88522599, 0.86113378],
[0.82065362, 0.97504932, 0.65321015, 0.96921815],
[0.95734724, 0.17062751, 0.58630317, 0.62395388]])
(11)np.random.rand(d0,d1,...,dn)
-
创建一个元素为 0-1(左闭右开)的随机数的多维数组
-
和 np.random.random 功能类似,掌握其中一个即可
-
参数说明:
-
dn:第 n 个维度的数值
-
n = np.random.rand()
n
# 执行结果
0.03291695735466904
n = np.random.rand(3,4)
n
# 执行结果
array([[0.15867292, 0.85912693, 0.67912155, 0.95042762],
[0.84022126, 0.85000877, 0.06752424, 0.71760504],
[0.97089325, 0.86010712, 0.77839465, 0.44999928]])