维度:一维数据的组织形式;
python中没有数组一说‘
列表和数组的差别:列表中数据类型可以不同,在这个列表中可以是整型,字符串等;但是对于数组来说从概念上来说,其必须是同一类型;
import numpy as np
def pysum():
a=np.array([0 1 2 3 4])
b=np.array([9 8 7 6 5])
c=a**2+b**3
return c
print(pysum())
二维数据是由多个一维数据构成,是一维数据的组合形式;表格是一个典型的二维数据;其中表头可以是二位数据的一部分;
高维数据仅利用最基本的二元关系就可以展示数据间的复杂结构;如键值对通过层层递进来表示高维数据
数据维度的python表示:
一维数据:列表和集合类型;(列表有序,集合无序)
二维和多维数据:列表类型 列表中的每一个元素又是一个列表;
高维数据:字典类型或者数据表示格式;注:数据表示格式有:json.XML,YAML这样的格式可以用来组织数据并使他没之间组成数据的维度之间的关系;
NumPy库的说明:
是一个开源的python科学计算基础库:
所含内容 :一个强大的N维数组对象 ndarray(数组)、广播功能的函数、整合了c、c++、Fortran代码的工具
线性代数、傅里叶变换、随机数生成等功能
NumPy库是SciPy、Pandas等数据处理或科学计算数据库的基础
引用方法:import numpy as np 建议使用np来作为该库的别名;
numpy库中的N维数组对象ndarry
def pysum():
a=[0 1 2 0 5 9]
b=[9 0 8 5 7 3]
c=[]
for i in range(len(a)):
c.append(a[i]**2+b[i]**3)
return c
print(pysum())
意思代码还是将计算放在每一个元素上来计算;通过每一个元素的便利循环来达到计算的功能;以上方法维最基本的方法
numpy库的使用;(这个库的底层运算是通过c来完成的)
np.arrays是生成数组;numpy库是对两个维度相同的数组进行对应位置元素进行处理;
N维数组对象ndarry:用来提升运算速度:
科学计算中;一个维度所有数据的类型往往是相同的,因此数组对象采用相同的数据类型,有助于节省运算和存储空间;
ndarray是一个多维数组对象;由两部分构成:
1、实际的数据
2、描述这些数据的元数组(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(有例外),数组下标从0 开始
np.array()生成一个ndarray数组;注:ndarray在程序中的别名是array
在输入时,同一个维度的数据放在同一个中括号里面,并用逗号分隔开,程序在输出时将变为空格分隔(在spyder中)
轴:保存数据的维度 秩:轴的数量
ndarray对象中五个基本的运算属性:
.ndim 秩,即轴的数量或者维度的数量
.shape ndarray对象的尺度,对于矩阵,n行m列
.size ndarray对象元素的个数,相对于.shape中n*m
.dtype ndarray对象 的元素类型
.itemsize ndarray对象中每个元素的大小,以字节为单位
import numpy as np
a=np.array([[1,2,3,4,5],[5,6,7,8,9])
a.ndim #结果为2 ,表示秩为2,即有两个维度
ndarray的元素类型:bool类型,int c 与c语言中int类型一样,一般是int32或者int64 ,int p用于索引的整数
int8 字节长度的整数,取值:[-128,127] int16 :16位长度的整数,取值:[-32768,32767]
int32 :32位长度的整数,取值:[-2^32,2^31-1] int64 :64位长度的整数,取值:[-2^63,2^63-1]
上面是有负数部分,因此叫做有符号整数类型,还有一部分是无符号整数类型
unit8 :8位无符号整数,取值 [0,2^8-1]
unit16 :16位无符号整数,取值 [0,2^16-1]
unit32 :32位无符号整数,取值 [0,2^32-1]
unit64 :64位无符号整数,取值 [0,2^64-1]
float16: 16位半精度浮点数:1位符号为,五位指数,10位尾数
float32: 32位半精度浮点数:1位符号为,8位指数,23位尾数
float64: 16位半精度浮点数:1位符号为,11位指数,52位尾数
复数类型:
complex64 : 复数类型,实部和虚部都是32位浮点数
complex128 : 复数类型,实部和虚部都是64位浮点数
复数类型:实部(.real)+虚部(.imag)
以上就是ndarray支持的数据类型
python语法仅支持整数、浮点数和负数三种类型;但是ndarray支持上面的数据类型;主要是因为:
科学计算涉及数据较多,对存储和性能都有较高的要求;对元素类型精确定义,有助于numpy合理使用存储空间并进行优化性能;
ndarray数组可以由非同质对象构成,即同一个维度不同位置的元素也可以是不同个数:如
x=np.array([[0,1,2,3,4],[9,8,7,6]])
以上就是第一个位置的元素由5个元素的列表组成,第二个位置由4个元素组成:
x.shape 返回(2,)因为非同质,只返回由两个维度的元素,而不返回每个维度由几个元素
x.dtype 返回’o',表示对象类型
x.size 返回2,即2*1
因为当ndarry非同质的时候,会认为每一个元素都是一个对象,j即当成一个整体考虑,此时又变成了一个同质的数组类型,也就是非同质的数据对象,此时无法发挥numpy的优势,因此应对避免
ndarray数组的创建和变换:
1.从python中的列表、元组等创建 x=np.array(list/tuple,dtype=np.float32)直接创建,第二个位置指定类型
x=np.array([0,1,2,3])#列表直接创建
x=np.array((0,1,2,3))#元组直接创建
x=np.array([[1,2],[3,4],(0.1,0.2)])#列表和元组混合创建,此时列表和元组包含的数据个数要相同
2、用numpy中的函数创建,如arange、ones、zeros
np.arange(n) 类似range函数,返回ndarry类型,元素从0-n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型,默认输出浮点数
表示最外层有两个元素,中间一层又三个元素,最内层有四个元素
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型,默认输出浮点数
np.full(shape,val) 根据shape生成一个全val数组,shape是元组类型
np.eye(n) 创建一个正方的n*n单位矩阵,对角线位1,其余都是0
np.ones_like(a),生成一个形状与a相同的全1数组
np.zeros_like(a),生成一个形状与a相同的全0数组
np.full_like(a,val),生成一个形状与a相同的全val数组
需要先给定数组a
使用其他函数创建:
np.linspace() 根据起止数据等间距的填充数据,形成数组 给定开始值,结束值,以及生成的数组包含的元素个数
间距是根据设定条件最大间距的等间距填充
zain
该函数默认生成数据类型为浮点数,且结束值默认包含着元素内,但是设置参数endpoint为false的时候则不包含在内;
np.concatenate() 将两个或者多个数组合并成一个新的数组
np.concatenate((a,b,c)) 表示将数组a b c 合并,数组须以元组类型打包
3.从字节流中创建
4、文件中读取特定格式后创建;
ndarray数组的变换:
1.维度变化
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变,这个函数的是使用需要保证元素的总体个数不发生改变,即下面例子中2*3*4=3*8
.resize(shape) 与reshape功能一致,但是修改原数组
.swapaxes(ax1.ax2) 将数组n 个维度中对应两个维度调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
2.类型变化
nes_a=a.astype(new_type) 会创建一个新数组,原数组不变
tolist()转换成列表:
ndarray数组的操作:
对数组的索引和切片;
一维数组索引与pyhon的列表一样:
a=np.array([1,2,3,4,5,6])
索引:a[3] 返回4
切片:a[1:4:2] 返回 array([2,4]),分别对应起始 结束和步长;
多维数组的索引和切片:
切片:
有几个维度就分成几段,每一段用冒号表示范围,冒号的最后一个参数为步长;
ndarray数组中的运算:
数组与标量之间进行运算,等价于数组中的每一个元素都与这个标量进行运算;
一元函数:对数组的运算,是对数组中的元素进行运算;
np.abs(x) np.fabs(x) 计算数组各元素的绝对值
np.sqrt(x) 计算数组各元素的平方根
np.square(x) 计算各元素的平方
np.log(x) np.log10(x) np.log2(X)计算各相应底数的对数
np.ceil(x) np.floor(x) 第一个表示不超过x的整数值,floor表示小于这个元素的最大整数
np.rint(x) 四舍五入
np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回
np.sin(X);np.cos(x);np.tan(X);np.sinh(x);np.cosh(h);np.tanh(X);
np.exp(x) 计算数组各元素的指数值
np.sign(x) 计算数组各元素的符号值; 1(+);0,-1(-);
以上函数运算后形成新的数组;
二元函数:两个数组运算之间的运算
+ - * / ** 两个数组对应元素进行运算
> < >= <= == != 对应元素的比较,返回布尔类型
np.maximum(x,y) np.fmax() / np.minimum(x,y)np.fmin() 元素级的最大最小值计算,如果x y数据类型不同,整型与浮点型的运算返回浮点型
np.mod(x,y) 元素级的模运算
np.copysign(x,y) 是将数组y中各元素的符号赋值给x对应的各元素;
利用numpy模块求解。
import numpy as np
a = np.array([1,2,3])
b = np.array([2,3,4])
c = np.array([3,4,5])
print(a+b+c)
1
2
3
4
5
需要注意的是,a+b+c后的类型为numpy.ndarray.
方法三:
利用numpy模块的sum()函数进行求解。
import numpy as np
a = [1,2,3]
b = [2,3,4]
c = [3,4,5]
print(np.sum([a,b,c], axis = 0))
axis=0 表示纵向求和