Python科学计算库Numpy

发布时间:2024年01月13日

array类型是Numpy的核心类型,也是Python作为为科学计算领域首选语言的关键类型,可以不夸张地说,正是array类型的强大与易用性,筑就了Python帝国。

数组索引

和Python中的其他容器一样,数组通过[]进行索引,并且在列表索引的基础上有所扩充,千万要注意,索引号从0开始。

import numpy as np
x = np.random.randint(100,size=(3,5))
print(x)
''' np.random.randint(100,size=(3,5))表示生成3行5列的100以内随机整数
[[ 8 52 80 82 33]
 [49 77 74 21 62]
 [63 74 21  6 47]]
'''
x[1]    # 第一行元素 [49, 77, 74, 21, 62]
x[-1]   # 倒数第一行元素 [63, 74, 21,  6, 47]
x[0,1]  # 第0行第1列元素 52
x[:,1]  # 第1列元素 [52, 77, 74]
x[0:2, 1:3]
'''第0到2行;第1到3列的所有元素
[[52, 80],
 [77, 74]])
'''
x[:2, 1:]
''' 0:2中的0可以省略;冒号后面什么也不写表示末尾
[[52, 80, 82, 33],
 [77, 74, 21, 62]])
'''

上面这三种属于比较常规的索引方法,:表示整行或整列,对于高维数组,则代表当前维度的所有数据。

此外,Numpy还支持通过列表进行索引

x[[0,2]]
''' 索引第0行和第2行
[[ 8, 52, 80, 82, 33],
 [63, 74, 21,  6, 47]])
'''
x[[0,1,2],[1,2,4]]
''' 索引(0,1), (1,2), (2,4)这三个点
[52, 74, 47]
'''

:语法也支持更高级的形式,

x = np.random.randint(100,size=(10))
# [ 4, 21, 81, 98, 61, 96, 16, 21, 94, 95]
x[1:8:2]
''' 从1到8,以2为间隔索引全部
[21, 98, 96, 21]
'''

二元计算

Numpy重载了如下运算符

运算符
数学计算+, -, *****, ****, \, %, ******
元素比较==, <, >, <=, >=, !=
位运算移位**<<, >>&**, ^, |, ~

这些运算符同标准Python是一样的,只不过应用对象从单个数值变为数组中的元素而已。位运算相对来说用得比较少,故而在此说明一下,^表示异或,|表示或,~表示取反。

x = np.array([1,0,1,0])
y = np.array([0,1,1,0])
x | y   # [1, 1, 1, 0]
x ^ y   # [1, 1, 0, 0]

除此之外,Numpy还实现了矩阵乘法@

Numpy的有一个强大的功能,即broadcast,一般被翻译成广播,即允许不同维度的数组进行计算,在下面的案例中,x为1行5列,y为3行1列,二者相加后编程了3行5列的矩阵。

x = np.random.randint(100,size=(5))
y = np.random.randint(100,size=(3,1))
print(x+y)
'''
[[131 110 115 123 152]
 [ 65  44  49  57  86]
 [146 125 130 138 167]]
'''

数据类型

Numpy的快捷,当然离不开明确的数据类型,下面列出了几个Numpy中常用数据类型

数据类型
整型ubyte, ufunc, uint, uint16, uint32, uint64, uint8, uintc, uintp, ulonglong
浮点型float16/half, float32, float64

这些数据类型可用字符串来表示,基本格式为,端序+标志+位数,其标志如下

说明说明
b有符号字节B无符号字节
i有符号整型u无符号整型
f实浮点数c复浮点数
m时间差M日期时间
O对象?布尔类型
U字符串V空数据
x.astype('>i8')  #将x转为大端序8位整型
x.astype('<f8')  #将x转为小端序8位浮点型

内置属性

Numpy数组中,内置了一些属性,可以方便调用

维度特征ndim, shape, size
内存信息itemsize, nbytes, stirdes, data, flags
类型信息dtype
代数信息实部real,虚部imag,转置T,展平flat

其中转置T和展平flat比较常用,但其flat之后并不会得到另一个一维数组,而是得到一个一维数组的迭代游标,可以此遍历,例如

>>> import numpy as np
>>> x = np.random.rand(2,2)
>>> for i in x.flat:
...   print(i)
...
0.47569020930997685
0.7621079266845692
0.522648906929767
0.6047491602097956
文章来源:https://blog.csdn.net/m0_37816922/article/details/128283585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。