文章目录
- 1 创建ndarray对象
- 1.1 根据已有列表和元组创建
- 1.2 创建特殊的ndarray对象
- 1.3 利用已有ndaary对象创建新的ndarray对象
- 1.4 其他创建方法
- 1.5 不常用的创建方法
- 2 数组的变化
- 2.1 维度变换(轴的数量和长度变换)
- 2.2 数据类型变化
- 2.3 转化为列表
- 3.数组的索引与切片
- 3.1 一维数组的索引与切片
- 3.1.1 索引
- 3.1.2 切片
- 3.1.3 切片和列表混着使用
- 3.2 多维数组的索引与切片。
- 3.2.1 索引
- 3.2.2 切片
- 3.2.3 混用
- 4 ndarray对象的运算
- 4.1 数组与标量之间的运算
- 4.2 数组运算的函数
- 4.3 两个数组的运算(二元函数运算,要求数组的shape相同),返回一个新的与原本的shape相同的数组
ndarray对象介绍看上一节
1 创建ndarray对象
1.1 根据已有列表和元组创建
1.单纯根据元组或者列表创建
list1=[1,2,3]
x=np.array(list1)
print(x)
tuple1=(1,2,3)
x=np.array(tuple1)
print(x)
[1 2 3]
[1 2 3]
2.可以通过设置元素的数据类型(后面的所有创建数ndarray对象都可以用这个参数指定数据类型)
没有指定数据类型,没有指定数据类型的话根据所有元素的精度最大的类型进行转换
可以通过numpy.数据类型名,或者数据类型字符串指定dtype关键字数据类型
x=np.array(list1,dtype="float64")
print(x)
[1. 2. 3.]
3.元组和列表混合使用来创建ndarray数组
只要元素数量相同就可以了
test=[[1,2,3],(4,5,6)]
x=np.array(test)
print(x)
[[1 2 3]
[4 5 6]]
1.2 创建特殊的ndarray对象
shape可以认为是一个元组,元组有几个元素表示是几维数组(又名秩,即为轴的数量),每个元素的值代表了这个轴的长度。
例如,满足(2,3)的数组
[[5 5 5]
[5 5 5]]
函数 | 说明 |
np.arange(n) | 类似range()函数,返回ndarray类型,元素从0到n‐1 |
np.ones(shape) | 根据shape生成一个全1数组,shape是元组类型 |
np.zeros(shape) | 根据shape生成一个全0数组,shape是元组类型 |
np.full(shape,val) | 根据shape生成一个数组,每个元素值都是val |
#shape以元组形式表示
#1.类似range函数,起点,终点,步长
x=np.arange(0,10,2)
print(x)
#2.全为1的数组
x=np.ones((2,3))
print(x)
#3.全为0的数组
x=np.zeros((2,3))
print(x)
#4.所有元素都为特定值的数组
x=np.full((2,3),5)
print(x)
#5.n阶乘对称数组
x=np.eye(5)
print(x)
[0 2 4 6 8]
[[1. 1. 1.]
[1. 1. 1.]]
[[0. 0. 0.]
[0. 0. 0.]]
[[5 5 5]
[5 5 5]]
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
1.3 利用已有ndaary对象创建新的ndarray对象
函数 | 说明 |
np.ones_like(a) | 根据数组a的形状生成一个全1数组 |
np.zeros_like(a) | 根据数组a的形状生成一个全0数组 |
np.full_like(a,val) | 根据数组a的形状生成一个数组,每个元素值都是va |
#三。根据已有数组创建新的有特点的数组
test=[[1,2,3],[4,5,6]]
a=np.array(test)
#1.全为1的数组
x=np.ones_like(a)
print(x)
#2.全为0的数组
x=np.zeros_like(a)
print(x)
#3.全为某个值的数组
x=np.full_like(a,4)
print(x)
[[1 1 1]
[1 1 1]]
[[0 0 0]
[0 0 0]]
[[4 4 4]
[4 4 4]]
1.4 其他创建方法
函数 | 说明 |
np.linspace() | 根据起止数据等间距地填充数据,形成数组,在这些元素之间等分,获得对应数量的等分点 |
np.concatenate() | 将两个或多个数组合并成一个新的数组 |
#endpoint为False把结尾不作为元素,
#3到10等分,获得3个元素,这几个元素的间距相同,并且不包括10这个元素
x=np.linspace(1,10,3,endpoint=False)
print(x)
#把两个数组链接
test=[[1,2,3],[4,5,6]]
a=np.array(test)
b=np.array(test)
x=np.concatenate((a,b))
print(x)
[ 1. 5.5 10. ]
[1. 4. 7.]
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
1.5 不常用的创建方法
• 从字节流(raw bytes)中创建ndarray数组
• 从文件中读取特定格式,创建ndarray数组
我们这里不介绍了
2 数组的变化
2.1 维度变换(轴的数量和长度变换)
方法 | 说明 |
.reshape(shape) | 不改变数组元素,返回一个shape形状的数组,原数组不变 |
.resize(shape) | 与.reshape()功能一致,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组n个维度中两个维度进行调换 |
.flatten() | 对数组进行降维,返回折叠后的一维数组,原数组不变 |
2.2 数据类型变化
ndarray数组的类型变换
new_a = a.astype(new_type)
2.3 转化为列表
ndarray数组向列表的转换
ls = a.tolist()
3.数组的索引与切片
3.1 一维数组的索引与切片
3.1.1 索引
像python的普通列表一样,下标也是从0开始的。也可以使用负数进行索引。(这里不再赘述)
a=np.array([1,2,3,4,5])
#1.索引,可以用下标索引(从0开始)从左往右选择,也可以使用负数进行索引
print(a[1])#第2个元素
print(a[-1])#最后一个元素
3.1.2 切片
#2.切片,类似列表,指定开始,结尾(不包括在内),步长(不写默认为1)
print(a[1:4:2])
#不写开头从开始切片,不写结尾切片到最后一个元素(包括在内)
print(a[:2])
print(a[2:])
print(a[:])#实现从头到尾的复制,类似于深拷贝
3.1.3 切片和列表混着使用
print(a[:2][1])
2
3.2 多维数组的索引与切片。
3.2.1 索引
a=np.array([[1,2,3,4,5],
[6,7,8,9,10]])
print(a[1])
print(a[1][2])
print(a[-1][-2])
print(a[1][-2])
[ 6 7 8 9 10]
8
9
9
[[3 4]
[8 9]]
[6 7]
3.2.2 切片
python的类似于数组的基本数据类型list根本不支持多维切片操作。因此我们把这个东西着重讲一讲
a=np.array([[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15]])
#2.切片,用逗号分隔,每一个维度类似于一维数组那样切片
print(a[1:,2:4])
[[ 8 9]
[13 14]]
用逗号分割每个维度上的切片,例如上面的切片的示意图就是下面这样的
(下面的图上的数字表示的都是序号,上面代码的数字表示的都是下标,注意区分)
3.2.3 混用
print()
#3.经常使用把高维数组的切片和索引一起使用,最后结果的维度取决于有几次切片操作
print(a[1][:2])
4 ndarray对象的运算
4.1 数组与标量之间的运算
数组与标量之间进行运算,数组中每个元素斗鱼标量进行运算
#一。数组与标量之间进行运算,数组中每个元素斗鱼标量进行运算
import numpy as np
#先生成一维数据,然后改变维度
a=np.arange(24).reshape((2,3,4))
print(a)
print(a*2)
print(a%2)
4.2 数组运算的函数
函数 | 说明 |
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 计算数组各元素的自然对数、10底对数和2底对数 |
np.ceil(x) np.floor(x) | 计算数组各元素的ceiling值或floor值,ceil是表示向上取整,即向正无穷靠拢,而floor是向下取整,即向负无穷靠拢。 |
np.rint(x) | 计算数组各元素的四舍五入值 |
np.modf(x) | 将数组各元素的小数和整数部分以两个独立数组形式返回 |
np.cos(x) np.cosh(x)np.sin(x) np.sinh(x)np.tan(x) np.tanh(x) | 计算数组各元素的普通型和双曲型三角函数 |
np.exp(x) | 计算数组各元素的指数值 |
np.sign(x) | 计算数组各元素的符号值,1(+), 0, ‐1(‐) |
4.3 两个数组的运算(二元函数运算,要求数组的shape相同),返回一个新的与原本的shape相同的数组
函数 | 说明 |
+ ‐* / ** | 两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素级的最大值/最小值计算 |
np.mod(x,y) | 元素级的模运算 |
np.copysign(x,y) | 将数组y中各元素值的符号赋值给数组x对应元素 |
> < >= <= == != | 算术比较,产生布尔型数组 |