np.savez的用法
np.savez 函数用于将多个 numpy 数组保存到一个压缩文件中,以便稍后可以使用 np.load 从该文件中加载这些数组。它的基本语法如下:
np.savez(file, *args, **kwds)
其中,file 参数是指保存的文件名,可以是字符串、文件对象或 pathlib.Path 对象,*args 参数是将要保存的数组列表,**kwds 参数是附加关键字参数。
下面是一个简单的例子,假设我们要将两个数组 a 和 b 保存到名为 'data.npz' 的文件中:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.savez('data.npz', a=a, b=b)
在这个例子中,我们使用了关键字参数 a=a 和 b=b,它们将数组 a 和 b 对应地保存到文件中。我们可以使用 np.load 函数从文件中加载这些数组:
data = np.load('data.npz')
print(data['a'])
print(data['b'])
输出结果为:
[1 2 3]
[4 5 6]
在加载文件后,我们可以通过键名来访问这些数组。需要注意的是,保存的文件是压缩的,所以可以在保存大量数据时节省磁盘空间。
如何批量给一个文件夹里的文件加噪并用np.savez保存到另一个文件夹
可以使用Python的Pillow库(PIL)来给一个文件夹里的所有图片加噪,并使用numpy库的np.savez函数将加噪后的数据保存到另一个文件夹中。具体实现步骤如下:
- 导入Pillow库和numpy库
from PIL import Image, ImageFilter
import numpy as np
import os
- 定义源文件夹和目标文件夹路径
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
- 定义一个空的numpy数组用来存储所有加噪后的图片数据
data = np.empty((0, 28 * 28))
- 遍历源文件夹中的所有图片,并对每张图片进行加噪处理,并将加噪后的图片数据添加到numpy数组中
# 遍历源文件夹中的所有图片
for file_name in os.listdir(src_folder):
# 构造源文件和目标文件的路径
src_path = os.path.join(src_folder, file_name)
# 打开图片文件
with Image.open(src_path) as img:
# 加噪处理
img = img.filter(ImageFilter.GaussianBlur(radius=5))
# 将图片转换为灰度图,并缩放到28x28大小
img = img.convert('L').resize((28, 28))
# 将图片转换为numpy数组,并将数据添加到data中
img_data = np.array(img).reshape(1, -1)
data = np.append(data, img_data, axis=0)
上述代码中,使用ImageFilter模块中的GaussianBlur函数给图片加上高斯模糊噪声,并将图片转换为灰度图,并缩放到28x28大小。可以根据需要调整噪声强度和类型、图像大小等参数。
- 使用np.savez函数将numpy数组保存到目标文件夹中
# 构造目标文件的路径
dst_path = os.path.join(dst_folder, 'data.npz')
# 将数据保存到目标文件中
np.savez(dst_path, data=data)
完整代码示例如下:
from PIL import Image, ImageFilter
import numpy as np
import os
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
data = np.empty((0, 28 * 28))
for file_name in os.listdir(src_folder):
src_path = os.path.join(src_folder, file_name)
with Image.open(src_path) as img:
img = img.filter(ImageFilter.GaussianBlur(radius=5))
img = img.convert('L').resize((28, 28))
img_data = np.array(img).reshape(1, -1)
data = np.append(data, img_data, axis=0)
dst_path = os.path.join(dst_folder, 'data.npz')
np.savez(dst_path, data=data)
注意,上述代码中只处理了jpg和png格式的图片文件,如果需要处理其他格式的文件,则需要更改代码中的文件类型判断条件。同时,处理噪声的方法也可以根据需要进行更改。
如何批量给一个文件夹里的各个文件加噪并用np.savez分别保存到另一个文件夹
可以使用Python的Pillow库(PIL)来给一个文件夹里的所有文件加噪,并使用numpy库的np.savez函数将每个加噪后的文件数据分别保存到另一个文件夹中。具体实现步骤如下:
- 导入Pillow库和numpy库
from PIL import Image, ImageFilter
import numpy as np
import os
- 定义源文件夹和目标文件夹路径
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
- 遍历源文件夹中的所有文件,并对每个文件进行加噪处理,并将加噪后的文件数据分别保存到目标文件夹中
# 遍历源文件夹中的所有文件
for file_name in os.listdir(src_folder):
# 构造源文件和目标文件的路径
src_path = os.path.join(src_folder, file_name)
dst_path = os.path.join(dst_folder, file_name)
# 判断文件是否是图片文件,如果不是则跳过
if not file_name.endswith('.jpg') and not file_name.endswith('.png'):
continue
# 打开图片文件
with Image.open(src_path) as img:
# 加噪处理
img = img.filter(ImageFilter.GaussianBlur(radius=5))
# 将图片转换为灰度图,并缩放到28x28大小
img = img.convert('L').resize((28, 28))
# 将图片转换为numpy数组,并将数据保存到目标文件中
img_data = np.array(img)
np.savez(dst_path, img_data=img_data)
上述代码中,使用ImageFilter模块中的GaussianBlur函数给图片加上高斯模糊噪声,并将图片转换为灰度图,并缩放到28x28大小。可以根据需要调整噪声强度和类型、图像大小等参数。保存文件时,使用np.savez函数将numpy数组保存到目标文件中。每个文件保存为一个.npz文件,文件名与源文件名相同。
完整代码示例如下:
from PIL import Image, ImageFilter
import numpy as np
import os
src_folder = '/path/to/source/folder'
dst_folder = '/path/to/destination/folder'
for file_name in os.listdir(src_folder):
src_path = os.path.join(src_folder, file_name)
dst_path = os.path.join(dst_folder, file_name)
if not file_name.endswith('.jpg') and not file_name.endswith('.png'):
continue
with Image.open(src_path) as img:
img = img.filter(ImageFilter.GaussianBlur(radius=5))
img = img.convert('L').resize((28, 28))
img_data = np.array(img)
np.savez(dst_path, img_data=img_data)
注意,上述代码中只处理了jpg和png格式的图片文件,如果需要处理其他格式的文件,则需要更改代码中的文件类型判断条件。同时,处理噪声的方法也可以根据需要进行更改。
相关推荐
















