numpy
一、 使用numpy生成数组,得到ndarray的类型
ndarry指Numpy最重要的一个特点:N维数组对象,该对象是一个快速而灵活的大数据集容器。
import numpy as np
#使用numpy生成数组,得到ndarray的类型
t1=np.array([1,2,3])
print(t1)
print(type(t1))
t2=np.arange(4,10,2)
print(t2)
print(type(t2))
print(t2.dtype)
还可以使用zeros和ones分别可以创建指定长度或形状的全0或者全1的数组,empty可以创建一个没有任何具体值的数组。
print(np.zeros(10))
print(np.zeros((3,6)))
数组创建函数:
二、NumPy - 数据类型
NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。
序号 | 数据类型及描述 |
---|---|
1. | bool_ 存储为一个字节的布尔值(真或假) |
2. | int_ 默认整数,相当于 C 的long,通常为int32或int64 |
3. | intc 相当于 C 的int,通常为int32或int64 |
4. | intp 用于索引的整数,相当于 C 的size_t,通常为int32或int64 |
5. | int8 字节(-128 ~ 127) |
6. | int16 16 位整数(-32768 ~ 32767) |
7. | int32 32 位整数(-2147483648 ~ 2147483647) |
8. | int64 64 位整数(-9223372036854775808 ~ 9223372036854775807) |
9. | uint8 8 位无符号整数(0 ~ 255) |
10. | uint16 16 位无符号整数(0 ~ 65535) |
11. | uint32 32 位无符号整数(0 ~ 4294967295) |
12. | uint64 64 位无符号整数(0 ~ 18446744073709551615) |
13. | float_ float64的简写 |
14. | float16 半精度浮点:符号位,5 位指数,10 位尾数 |
15. | float32 单精度浮点:符号位,8 位指数,23 位尾数 |
16. | float64 双精度浮点:符号位,11 位指数,52 位尾数 |
17. | complex_ complex128的简写 |
18. | complex64 复数,由两个 32 位浮点表示(实部和虚部) |
19. | complex128 复数,由两个 64 位浮点表示(实部和虚部) |
NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。
三、数据类型的操作
- 求数据类型
print(t1.dtype) - 指定数据类型:
t1=np.array([1,2,3,4,5],dtype=bool/float/int/unit) - 修改数据类型:
t1.astype(“i1”)或者使用t1.astype(np.int8) - 随机数:
random.random() - 生成十个小数:
t6=np.array([random.random() for i in range(10)])
修改小数位数: - t7=np.round(t6,2) #t6取两位小数
举例:
#numpy中的数据类型
t3=np.array((range(1,4)),dtype="i1")
print(t3)
print(type(t3))
print(t3.dtype)
t5=np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(t5.dtype)
#numpy中的小数
t6=np.array([random.random() for i in range(10)]) #生成十个小数
print(t6)
print(t6.dtype)
#取几位小数
t7=np.round(t6,2) #t6取两位小数
print(t7)
print(t7.dtype)
结果:
四、数组的运算
数组很重要,因为它使你不用编写循环即可对数据执行批量运算。
- t1.shape()结果有几个数字就是几维 :
一个数字就是一维数组,两个就是二维数组… - t1.reshape()重组:
一维:((24,))二十四个元素 元素个数的计算方法:(t1.shape(0)*t1.shape(1)
二维:((2,3))二行三列
三维:((2,3,4))两组三行四列 - 将未知数量的数组变为一维:
t1.flatten()
大小相等的数组之间的任何算术运算都会将运算应用到元素级:
arr=np.array([[1.,2.,3.],[4.,5.,6.]])
print(arr)
print(arr*arr)
print(arr-arr)
数组与标量的算术运算会将标量值传播到各个元素:
print(1/arr)
print(arr**0.5)
大小相同的数组之间的比较会生成布尔值数组:
arr2=np.array([[0.,4.,1.],[7.,2.,12.]])
print(arr2)
print(arr2>arr)
加减乘除
当维度相同并且行列相同可以加减乘除
but当维度不同时,行列数相同可以加减乘除
当行列数不同时,当其中一个行数为一,两个地列数相同可以加减乘除
五、轴
轴0作为行,轴1作为列
在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据)。
六、通用函数(ufunc)
一些一元和二元ufunc
1.一元ufunc:
2.二元ufunc:
七、统计方法、排序及唯一化和它的集合逻辑
1.统计方法:
在上面这些方法中,布尔值会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值计数:
arr = np.random.randn(100)
print((arr>0).sum())
另外还有两个方法any和all,它们对布尔型数组非常有用。any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True:
bools=np.array([False,False,True,True])
print(bools.any())
print(bools.all())
2.排序:
排序:t1.sort()
3.唯一化及它的集合逻辑:
唯一化:t1.unique()
数组的集合运算:
八、数组的文件输入输出
代码 | 作用 |
---|---|
np.save() | 读写磁盘数组数据 |
np.load | 读写磁盘数组数据 |
np.savez | 将多个数组保存到一个未压缩文件中 |
numpy.savez_compressed | 将数据压缩 |
如果文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组