【Python】numpy——数组array

import numpy as np

Numpy的主要对象是同质的多维数组array

为了可视化切片过程,我们把二维数组的垂直方向定义为 axis 0 轴,水平方向为 axis 1 轴。

一、创建数组

创建Numpy数组一般有三种方法:

(1)通过传入可迭代对象创建,我将之称为基本方法np.array()
(2)使用Numpy内部功能函数,内部方法
(3)使用特殊的库函数,特殊方法

(1)np.array()

 (2)np.ones()、np.zeros()、np.eye()、np.empty()

函数zeros创建一个都是0的数组,

函数ones创建一个都是1的数组,

函数empty创建一个初始内容是0或者垃圾值的数组,这取决于内存当时的状态。

默认情况下,创建的数组的数据类型为float64

np.zeros(3)
np.zeros( (3,4) )
np.ones( (2,3,4), dtype=np.int16 )


np.empty( (2,3) )   # 根据当前内存状态的不同,可能会返回未初始化的垃圾数值,不安全。
np.full((3,4), 2.2) # 创建一个全部由2.22组成的数组

 (3)特殊方法:

1.np.arange()

2.np.linspace() 

 

注意

1.endpoint默认为True:

np.linspace()默认是包含终点的 [start,end]

2.dtype

如果未给出数据类型,则从开始和停止推断数据类型。

推断出的数据类型永远不会是整数;即使参数将生成整数数组,也会选择float。

 (3)np.logspace()

参数设置类似于np.linspace()

1.endpoint默认为True:

np.logspace()默认是包含终点的 [start,end]

2.dtype

如果未给出数据类型,则从开始和停止推断数据类型。

推断出的数据类型永远不会是整数;即使参数将生成整数数组,也会选择float。

3.base默认为10:

相当于10**np.linspace()

 (4)np.identity()

 (5)np.random——    .randint()    .rand()    .stardard_normal()

 

 (6)np.diag()

二、测试两数组是否相同(相近)——np.isclose(),np.allclose()

isclose(),allclose()函数来测试两个数组中对应位置上的元素在允许的范围内是否相等。并可以接收绝对误差参数和相对误差参数。

  • allclose():返回单个TrueFalse
  • isclose():返回若干True/False的列表

 三、修改数组

1.np.append()

返回新数组,不影响原来的数组

注意一维数组和多维数组追加的区别:

n维数组要保持维度,只能追加n维数组,不然报错;

多维数组追加一维数组后,会变成一维数组(axis=None,先展平)

 

ndarray没有这个方法,而是numpy下的: 

 

多维数组的行追加、列追加和多维追加(axis=0,axis=1……):

 

 2.np.insert()

返回新数组,不影响原来的数组

注意一维数组和多维数组插入的区别:

axis=None时,会先将数组展平

 

 3.切片

四、数组的运算

1.数组与标量

2.数组与数组

等长数组:对应元素相加

不等长数组:广播

 3.数组的内积

 4.数学函数

x = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))
print(x)
print(np.sin(x))                # 一维数组中所有元素求正弦值
print(np.cos(x))                # 二维数组中所有元素求余弦值
print(np.round(np.cos(x)))      # 四舍五入
print(np.ceil(x/2))             # 向上取整

 5.布尔运算 ><== &| np.all() np.any() np.sum()

 五、数组排序

1.ndarray.sort(),numpy.sort()

axis=0:列的元素改变位置,垂直方向计算

axis=1:行的元素改变位置,水平方向计算

 

 2.np.argsort(),np.argmax(),np.argmin()

 # _表示上一条语句

六、赋值、深复制、浅复制(视图)

赋值:对同一对象新建了一个引用

浅复制:共享数据,保存在base数组中(改变数据会互相影响)

深复制:新建完全不同的两个对象,除了初始数据相同

 


numpy中的array只有赋值受到改变形状的影响

赋值、切片、视图均受到改变值的影响

在python标准库中,

对list对象——

赋值相当于新建引用(始终为同一变量),

切片相当于浅拷贝(只拷贝外层元素,内部嵌套元素通过引用,而不是独立分配内存)

 

切片不会受到改变值的影响

跟 int对象一样 

七、访问数组

1.下标、切片

a[x1][y1]
a[x1,y1]                   # 输出a[x1][y1]
a[[x1,x2,x3],[y1,y2,y3]]   # 输出a[x1][y1],a[x2][y2],a[x3][y3]
a[x1:x3,y1:y3]             # 输出a[x1][y1:y3],a[x2][y1:y3]
                           # 输出a[x1][y1],a[x1][y2],a[x2][y1],a[x2][y2]

a[x1]                      # 输出a[x1][:]
a[[x1,x2,x3]]              # 输出a[x1][:],a[x2][:],a[x3][:]
a[:,[y1,y2,y3]]            # 输出a[:][y1],a[:][y2],a[:][y3]

  

 

 八、改变形状 x.shape x.reshape() x.resize()

1. x.shape x.size

x.shape:返回形状的元组

x.size:元素总个数

 2. x.reshape()

 3. x.resize() np.resize() 

注意:array不能引用或被引用

ValueError: cannot resize an array that references or is referenced ...

 np.resize()则没有这个要求

 

九、查找、过滤数组元素  np.where() np.piecewise()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值