【Python】numpy——数组array

【Python】numpy——数组array,第1张

【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():返回单个True或False
  • 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对象——赋值相当于新建引用,切片作右值相当于深复制,作左值相当于视图?

切片没有受到改变值的影响:

七、访问数组 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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存