numpy是高性能科学计算和数据分析的基础包,支持为读书族与矩阵运算包括:
创建nadrray:创建数组最简单的办法就是使用array函数,它接受一切序列型的对象,然后产生一个含有传入数据的numpy数组,其中嵌套序列(等长列表组成的列表)将会被转化为一个多维数组
numpy.array(obkject, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object 数组或嵌套的数列
dtype 数组元素的数据类型 可选
copy 对象是否需要复制
order 创建数组的样式,c为行方向,F为列方向,A为任意方向
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
import numpy as np
a = [1,2,3,4]
b = np.array(a)
print(b)
>>> array([1,2,3,4])
c = np.array([[1,2],[3,4]])
print(c)
>>>>[[1,2]
[3,4]]
除了np.array之外,还有一些函数也可以新建数组:
np.zeros(3) # 全0数组
np.ones(3) # 全1数组
np.zeros((3,3)) #全0二维数组 三行三列
np.zeros((3,1)) # 0二维数组 三行一列
np.zeros((1,3))
np.ones((3,3))
np.identity(3) #单位矩阵,三行三列
创建随机数
np.random.randint(0,50,5) # 随机数组,5个0-50之间的数字
np.random.randint(0,50,(3,5)) #3行5列 供15个随机数,都在0-50之间
np.random.rand(10) #10个结余[0,1)之间的随机数
np.random.standard_noraml(5) #从标准正太分部中随机采样5个数字
用法 | 说明 |
---|---|
b.size | 数组元素个数 |
b.shape | 数组形状 |
b.ndim | 数组维度 |
b.dtype | 数组元素类型 |
b.ltemsize | 数组元素字节大小 |
b.reshape()可以更改形状(3,2)变(2,3)或者其他
数组很重要,因为它可以是我们不用编写循环即可对数据执行批量运算,这通常叫做矢量化,大小相同的数组之间的任何算数运算都会将运算应用到元素级,同样,数组与标量的算数运算也会将那个表两只传播到各个元素
arr = np.array([[1.,2.,3.],[4.,5.,6.]])
print(arr)
>>>array([[1., 2., 3.],
[4., 5., 6.]])
print(1/array)
>>>array([[1. , 0.5 , 0.33333333],
[0.25 , 0.2 , 0.16666667]])
print(arr-arr)
>>>array([[0., 0., 0.],
[0., 0., 0.]])
print(arr*arr)
>>>array([[ 1., 4., 9.],
[16., 25., 36.]])
print(arr*0.5)
>>>array([[0.5, 1. , 1.5],
[2. , 2.5, 3. ]])
arr = np.arange(10)
print(arr[5])
>>>5
print(arr[5:8])
>>>array([5,6,7])
print(arr[5:8]=12)
>>>array([0,1,2,3,4,12,12,12,8,9])
arr_slice = arr[5:8]
arr_slice[1] = 12345
print(arr)
>>>array([0,1,2,3,4,12,12345,12,8,9])
arr_slice[:] = 64
print(arr)
>>>array([0,1,2,3,4,64,64,64,8,9])
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr3d)
>>>array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
print(arr3d[0])
>>>array([[1, 2, 3],
[4, 5, 6]])
print(arr3d[0][1])
>>>array([4, 5, 6])
可以通过数组上的一组数学函数对整个 数组或者某个轴向的数据进行统计计算
方法 | 说明 |
---|---|
sum | 对数组中全部或轴向元素求和。零长度的数组的sum为0 |
mean | 算数平均数,零长度的数组的mean为NAN |
std,var | 分别为标准差和方差,自由度可调(默认为n) |
min,max | 最小值和最大值 |
argmin,argmax | 分别为最小值和最大值的索引 |
cumsum | 所有元素的累加 |
cumprod | 所有元素的累积 |
arr = np.random.randn(5,4) #5行4列的正太分部的数据
print(arr.mean()) #这个值和下面方法的值相同
print(np.mean(arr))
print(arr.sum())
值得注意的是:
mean和sum这类的函数可以接受一个axis参数(用于计算该轴向上的统计值)
arr.mean(axis=1)
arr.sum(0)
cumsum:按照所给定的周参数返回元素的梯形累积和,axis=0,按照行累加。axis=1,按照列累加
cumprod:按照所给定的周参数返回元素的梯形累积乘积,axis=0,按照行累积,axis=1按照列累积
arr = np.array([[0,1,2],[3,4,5],[6,7,8]])
arr.cumsum(0)
>>>array([[ 0, 1, 2],
[ 3, 5, 7],
[ 9, 12, 15]], dtype=int32)
arr.cumprod(1)
>>>array([[ 0, 0, 0],
[ 3, 12, 60],
[ 6, 42, 336]], dtype=int32)
如果想获取更多有关python的信息,和想玩python制作的小程序,可以关注微信公众号(dreamspy)。我们一起用python改变世界,一起用python创造梦想。