一维数据:列表和集合类型 一维数据:列表和集合类型
[3.13, 4.13, 2,34] 有序 {3.13, 4.13, 2,34} 无序 二维数据:列表类型 多维数据:列表类型 高维数据:字典类型或数据表示格式>>> import numpy as np
>>> a=[[1,2],[3,4]]
>>> a_array=np.array(a)
>>> a_array
array([[1, 2],
[3, 4]])
>>> type(a_array)
numpy.ndarray
np.array(list/tuple, dtype=np.float32)
例子
>>> np.array([[1,2],[3,4]])
>>> np.array(((1,2),(3,4)))
array([[1, 2],
[3, 4]])
有整数有浮点数则转浮点
>>> np.array([[1,1.1],(2,2.1)])
array([[1. , 1.1],
[2. , 2.1]])
数组元素的类型:原因解释
ndarray为什么要支持这么多种元素类型? Python语法仅支持整数、浮点数和复数3种类型 Ndarry的优势 • 科学计算涉及数据较多,对存储和性能都有较高要求 • 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能 • 对元素类型精细定义,有助于程序员对程序规模有合理评估 常用创建数组的函数 使用Numpy中函数创建ndarry数组,如arrange,ones,zeros等实例
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> np.ones((3,6))
array([[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1.]])>>> np.ones((2,4),dtype=np.int32) :
array([[1, 1, 1, 1],[1, 1, 1, 1]])>>> np.eye(4)
array([[1., 0., 0., 0.],[0., 1., 0., 0.],[0., 0., 1., 0.],[0., 0., 0., 1.]])>>> np.full((2,4),4)
array([[4, 4, 4, 4],
[4, 4, 4, 4]])
a = np.array([[0, 1, 2, 3], [4, 5, 6, 7]]) #二维数组
b = np.array([0, 1, 2, 3]) #一维数组
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。
下方的输入为数组
>>> a = np.ones((2,3,4), dtype=np.int32)
>>> a.reshape((3,8))
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]])
>>> a #a的内容改变
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]]])
>>> a.flatten() #平铺
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])
>>> aa=np.arange(8).reshape((2,4))
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
In [27]: aa.transpose() #转置
array([[0, 4],
[1, 5],
[2, 6],
[3, 7]])
#不确定数目
>>> a.reshape((4,-1))
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]])
array.tolist()
>>> np.arange(8).reshape((2,4))
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
>>> np.arange(8).reshape((2,4)).tolist()
Out[42]: [[0, 1, 2, 3], [4, 5, 6, 7]
>>> a=np.arange(9).reshape((3,3))
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
>>> b=np.split(a, 3, axis=1)
[array([[0],
[3],
[6]]),
array([[1],
[4],
[7]]),
array([[2],
[5],
[8]])]
格式:array_name[索引值或序列]• 索引值0开始从左递增,或-1开始从右递减 • 起始编号: 终止编号(不含): 步长,3元素冒号分割
>>> a=np.arange(1,6)
>>> a
array([1, 2, 3, 4, 5])
## 单个索引,切片索引
>>> a[2]
3
>>> a[1:4:2]
array([2, 4])
## 索引值为序列
>>> a[1,3] #列表
array([2, 4])
>>> a[np.array([1,3])] #数组
array([2, 4])
>>> a=np.arange(1,6)
>>> b=a
>>> b[-1]=8
>>> b
array([1, 2, 3, 4, 8])
>>> a
array([1, 2, 3, 4, 8])
>>> b=a[:]
>>> b[-1]=8
>>> b
array([1, 2, 3, 4, 8])
>>> a
array([1, 2, 3, 4, 8])
>>> a=np.arange(1,6)
>>> b=a[1:3]
>>> b[-1]=8
>>> b
array([2, 8])
>>> a
array([1, 2, 8, 4, 5])
>>> b=a[1:3].copy()
>>> b[-1]=8
>>> a
array([1, 2, 8, 4, 5]) # 保持不变
ndarry [axis0_index,axis1_index]
>>> arr2d =np.arange(9).reshape(3,3)
>>> arr2d
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> arr2d[1,2]
5
二维数组的切片索引
二维数组默认沿着第0轴(即行索引)切片的。切片是沿着一个轴向选取元素的。ndarry[axis0_slice, axis1_slice]
>>> arr2d =np.arange(9).reshape(3,3)
>>> arr2d
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> arr2d[:2] #默认行索引
array([[0, 1, 2],
[3, 4, 5]])
>>> arr2d[:2, : ] #:表示所有元素
array([[0, 1, 2],
[3, 4, 5]])
实例
>>> np.insert(a,1,[0,0,0,0],0) #增加
array([[ 0,1, 2,3],
[0,0,0,0],
[4,5,6,7],
[8,9,10,11]])>>> np.delete(a,0,1) #删除含有0的列
array([[ 1,2,3],
[ 5,6,7],
[ 9, 10, 11]])>>> np.append(a, [[1,2,3,4]], 0)
#末尾修改
array([[ 0,1, 2,3],
[ 4,5,6,7],
[ 8,9,10,11],
[ 1,2,3,4]]) :>>> np.where(a==1)#查找含有1的
(array([0], dtype=int64),
array([1], dtype=int64))
>>> a=np.arange(1,9).reshape((2,4))
>>> a
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>> a**2
array([[ 1, 4, 9, 16],
[25, 36, 49, 64]], dtype=int32)
>>> 1/a
array([[1, 0.5, 0.333333,0.25],
[0.2 ,0.166667, 0.14285, 0.125])
布尔型索引:切边索引数组直接赋值
切片索引(整数型或布尔型)后的数组均可直接赋值>>> data = np.random.randn(7, 4)
>>> a
array([[-1.04067731, -0.03879518, 0.98019589, -0.88795274],
[-1.18705612, 0.4635102 , 0.91812337, -0.81458408],
[ 0.86988195, 0.3959186 , 0.33063004, -0.1769584 ],
[-0.46452414, -0.46827261, -0.20851302, 0.22864186],
[-0.04973137, -0.23765974, 0.54263156, -0.06470696],
[-0.89274831, 2.5559152 , 1.02892789, 2.16099481],
[ 2.07400286, -1.96976106, -0.97007937, 1.84897368]])
array([[ True, True, False, True], [ True, False, False, True], [False,
False, False, True],
[ True, True, True, False], [ True, True, False, True], [ True, False,
False, False], [False, True, True, False]])>>> idx=(data<0)
>>> data[data < 0] = 0
>>> data
array([[0., 0., 0.98019589, 0.],
[0., 0.4635102 , 0.91812337, 0.],
[0.86988195, 0.3959186 , 0.33063004, 0.],
[0., 0., 0., 0.22864186],
[0., 0., 0.54263156, 0.],
[0., 2.5559152 , 1.02892789, 2.16099481],
[2.07400286, 0., 0., 1.84897368]])
>>> arr = np.random.randn(10)
>>> arr
array([-0.71497659, -0.97902783, -
0.18698594, 0.08350516, -0.42339716,
-0.86465629, 0.70777104, -1.22436206, -
1.02389181, -1.30741898])
>>> arr_bool=(arr>=0)
array([False, False, False, True, False, False,
True, False, False, False])>>> arr_bool.sum()
2 #大于0的个数
>>> arr_bool.any()
True #存在大于0
>>> arr_bool.all()
False #是否均大于0
对ndarray中的数据执行元素级运算的函数
例子
>>> a=np.arange(1,10).reshape((3,3))
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> np.sqrt(a)
array([[1. , 1.41421356, 1.73205081],
[2. , 2.23606798, 2.44948974],
[2.64575131, 2.82842712, 3. ]])>>> np.modf(b)
array([[0., 0.41421356, 0.73205081],
[0. , 0.23606798, 0.44948974],
[0.64575131, 0.82842712, 0. ]]),
array([[1., 1., 1.],[2., 2., 2.],[2., 2.,
3.]]))
>>> np.nodf(b)
>>> a=np.arange(1,10).reshape((3,3))
>>> b=np.sqrt(a)
>>>np.fmax(a,b)
array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])>>> a>b
array([[False,True, True],
[ True, True, True],
[ True, True, True]])
xx,yy=np.meshgrid(x,y)其中生成的第一个二维数组是以xarray为行,共y-dimesion行的向量;第二个二维数 组是以 yarray的转置为列,共x-dimesion列的向量。
>>> x=np.array([0,1,2,3]) #横坐标
>>> y=np.array([0,1,2,3,4]) #纵坐标
>>> xx,yy=np.meshgrid(x,y)>>> xx
array([[0,1,2,3],
[0,1,2,3],
[0,1,2,3],
[0,1,2,3],
[0,1,2,3]])>>> yy
array([[0,0,0,0],
[1,1,1,1],
[2,2,2,2],
[3,3,3,3],
[4,4,4,4])
x if condition else y || V np.where(condition,x,y)
>>> arr = np.random.randn(4,4)
>>> arr >0
array([[False, False, False, False],
[ True, True, False, True],
[ True, True, True, False],
[ True, False, True, True]],
dtype=bool)>>> np.where(arr>0, 2,- 1)
array([[-2, -2, -2, -2],
[ 2, 2, -2 ,2],
[ 2, 2, 2 ,-2],
[ 2, -2, 2 ,2]])
通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。聚合计算(aggregation,通常叫做约简(reduction))
注意轴操作:axis=0或1>>> from random import normalvariate
>>> N = 1000000
>>> samples = [normalvariate(0, 1) for _ in range(N)]
1.77 s +- 126 ms per loop (mean +- std. dev. of 7 runs, 1 loop each)
>>> np.random.normal(size=N)
61.7 ms +- 1.32 ms per loop (mean +- std. dev. of 7 runs, 10 loops each)
实例
np.loadtxt(fname, dtype=•fname 被读取的文件名(文件的相对地址或绝对地址) • dtype 指定读取后数据的数据类型,例如 float32,int32。 • comments 跳过文件中指定参数开头的行(即不读取), comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None,*, like=None)
>>> converters={1:_is_num}
#字典的形式,对指定 的列执行相关操作
np.loadtxt(frame,dtype=np.float, delimiter=None,unpack=False)
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
传送门:Python全套学习笔记