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