python科学计算3 ndarray对象


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对应元素
> < >= <= == !=算术比较,产生布尔型数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值