1.5 NumPy数据保存
🚩我们可以使用 save 方法去保存我们的数组:
import numpy as np arr = np.arange(0, 10, 3) # NumPy 的方法,功能类似 # 当前目录 np.save('./data1', arr) # 保存
运行后我们返回到创建好的目录下:
可以发现多了一个 data1.npy
这里面就是我们刚刚保存的数组信息。
注意,如果你点开新建立的这个文件的话,会发现:
里面并没有我们想看到的存储信息,这是因为文件保存的内容是二进制的,只能使用代码去打开,下面我们介绍从文件中读取我们的数据的方法:
我们按照下述代码可以取出数据:
import numpy as np arr = np.arange(0, 10, 3) # NumPy 的方法,功能类似 np.load('./data1.npy') # 取出数据
如果我们要把多个数组存入一个文件,可以使用 savez 方法:
import numpy as np arr = np.arange(0, 10, 3) # NumPy 的方法,功能类似 np.set_printoptions(suppress = True) arr2 = np.logspace(0, 10, base = 2, num = 11) np.savez('./data2.npz', x = arr, y = arr2) # 把arr和arr2都存入'./data2.npz' # 把arr存入,起名为x;把arr2存入,起名为y
运行后,可以看到多了一个 data2.npz
文件,这里面就是我们刚刚保存的数组信息。
我们在取值的时候可以一个一个取:
import numpy as np arr = np.arange(0, 10, 3) # NumPy 的方法,功能类似 np.set_printoptions(suppress = True) arr2 = np.logspace(0, 10, base = 2, num = 11) np.load('./data2.npz')['x'] # 取出 x ---> 取出 arr np.load('./data2.npz')['y'] # 取出 y ---> 取出 arr2
注意我们存的时候用什么名,取的时候就用什么名,比如:
显然在这个时候取出 y
的话就是错误的。
读写csv、txt文件:
import numpy as np arr = np.random.randint(0, 10, size = (3, 4)) # 储存数组到csv文件 np.savetxt("./arr.csv", arr, delimiter = ',') # 存储到txt文件也一样 # 读取文件 np.loadtxt('./arr.csv', delimiter = ',', dtype = np.int32)
1.6 NumPy数据类型
🚩我们的数据类型包涵三大类:
整数
浮点数
字符串
ndarray的数据类型:
- int(整数):
int8、uint8、int16、int32、int64
- float(浮点数):
float16、float32、float64
- str(字符串)
float16 float32
,int16 int 32
有什么不同:数字越大,证明其在内存中所占内存越大,当然相应的,可以表示的数的范围也就越大:如 int8 的范围大小为 28,但是因为它既包含正数也包含负数,故它其实可以表达的范围就是 [-128, 127] ,unit8 的范围也是28,同的是它不包含负数即只包含0和正数,故 unit8 的取值范围就是 [0, 255],使用 astype() 方法可以转换数据类型:
我们在创建类型的时候,可以用dtype
指明它的数据类型
当然,我们还可以给它为 int32:
我们输入如下代码,编译运行:
然后返回到我们的文件夹查看我们刚刚保存的两个文件:
很直观的可以注意到,两个文件的大小相差大致为8倍,这个的原因其实就是 64 / 8 = 8
使用 astype() 方法可以转换数据类型:
这里我们需要注意,转换之后,原数组的数据类型是不变的,使用astype()进行转换可以说是创建了一个新的数组:
1.7 NumPy数组运算
🚩数组运算包含一个数组元素内的运算以及两个或多个数组之间的运算:
1.7.1 加减乘除幂运算
我们在算次方的时候也可以调用 power() 函数
当然还有还支持 / 和 % 运算
两个数组的运算,其实就是对应位置的运算:
import numpy as np arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([2, 4, 4, 6, 6]) print(arr1 - arr2) # 减法 print(arr1 + arr2) # 加法 print(arr1 * arr2) # 乘法 print(arr1 / arr2) # 除法 print(arr1 ** arr2) # 幂运算
1.7.2 逻辑运算
当然,两个数组之间也有逻辑运算:
1.7.3 += -= *= 操作
❗️ 注意:上述的操作并没有改变数组的原值,可以理解为重新创建了一个新的数组,但是下面的操作,是直接在数组的基础上进行修改,会改变数组的元素的值
注意,这里不包含 /= 运算,会报错,在这里为 //=: