Python NumPy 标准数据生成:高效创建与操作数组
Python NumPy 标准数据生成:高效创建与操作数组
文章目录
- Python NumPy 标准数据生成:高效创建与操作数组
- 一 主要涉及功能
- 二 初始化数据
- 1 初始值为 `0` 或 `1` 的数据
- 2 初始化指定数值
- 三 复刻形状和类型
- 四 创建规则数据
- 五 快速创建再添加值
- 1 快速创建数组
- 2 np.empty 和 np.ones 对比
- 3 使用场景
- 六 完整代码示例
- 七 源码地址
本文介绍如何使用 Python 的 NumPy 库高效生成各种标准数据数组,包括全零、全一、指定数值的数组,以及根据现有数组形状快速创建新数组。我们探讨了常用的数组创建方法,如 np.zeros()
、np.ones()
、np.full()
等,展示了如何使用 np.arange()
和 np.linspace()
生成规则数据。通过 np.empty()
方法可以快速初始化数组,占用更少时间,非常适用于大规模数据的初始化和后续赋值操作。本文为你提供创建高效且灵活的数据数组的完整指南。
导入 numpy
import numpy as np
一 主要涉及功能
创建统一数据 | 创建规则数据 | 快速创建再添加值 |
---|---|---|
np.zeros(), np.ones(), np.full() | np.arange() | np.empty() |
np.zeros_like(), np.ones_like() | np.linspace() | np.empty_like() |
np.full_like() |
二 初始化数据
1 初始值为 0
或 1
的数据
# 初始化 Array 全 0 或者全 1 的数据
zeros = np.zeros([2, 3])
print("zeros:\n", zeros)
ones = np.ones([3, 2])
print("\nones:\n", ones)
2 初始化指定数值
# 初始化指定数值
nines = np.full([2, 3], 9)
print(nines)
三 复刻形状和类型
data = np.array([[1, 2, 3],[4, 5, 6]
], dtype=np.int64)ones = np.ones(data.shape, dtype=data.dtype)
# 复刻形状和类型
# 返回与给定数组具有相同形状和类型的数组,初始化值为 1
ones_like = np.ones_like(data)print("ones:", ones.shape, ones.dtype)
print("ones_like:", ones_like.shape, ones_like.dtype)
print("ones_like value:\n", ones_like)
print(np.zeros_like(data))
print(np.full_like(data, 6))
使用 np.ones_like
函数返回与给定数组具有相同形状和类型的数组,初始化值为 1 。
四 创建规则数据
print("python range:", list(range(5)))
print("numpy arange:", np.arange(5))print("python range:", list(range(3, 10, 2)))
print("numpy arange:", np.arange(3, 10, 2))
# (start, end, num)
print("linspace:", np.linspace(-1, 1, 5))
print("5 segments:", np.linspace(-1, 1, 5, endpoint=False))
注: np.linspace(-1, 1, 5)
的区间为 [-1,1]
, np.linspace(-1, 1, 5, endpoint=False)
的区间为 [-1,1)
。
五 快速创建再添加值
1 快速创建数组
# 快速创建再添加值,忽略生成的乱数据。这个不能当作随机数使用。
print(np.empty([4, 3]))
2 np.empty 和 np.ones 对比
t0 = time.time()for _ in range(1000):_ = np.ones([100, 100])t1 = time.time()
for _ in range(1000):_ = np.empty([100, 100])t2 = time.time()
print("ones time:", t1 - t0)
print("empty time:", t2 - t1)
运行结果
ones time: 0.0019249916076660156
empty time: 0.0001499652862548828
3 使用场景
使用场景快速初始化指定形状的数据,并进行赋值。
# 快速初始化对应形状的数据
empty1 = np.empty([2, 3], dtype=float)
print("empty before:\n", empty1)
data = np.arange(6).reshape([2, 3])
print(data)
for i in range(data.shape[0]):for j in range(data.shape[1]):empty1[i, j] = data[i, j] * random.random()
print("empty after:\n", empty1)
六 完整代码示例
# This is a sample Python script.# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
import numpy as np
import time
import randomdef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint.# 创建统一数据# 初始化 Array 全 0 或者全 1 的数据zeros = np.zeros([2, 3])print("zeros:\n", zeros)ones = np.ones([3, 2])print("\nones:\n", ones)# 初始化指定数值nines = np.full([2, 3], 9)print(nines)data = np.array([[1, 2, 3],[4, 5, 6]], dtype=np.int64)ones = np.ones(data.shape, dtype=data.dtype)# 复刻形状和类型# 返回与给定数组具有相同形状和类型的数组,初始化值为 1ones_like = np.ones_like(data)print("ones:", ones.shape, ones.dtype)print("ones_like:", ones_like.shape, ones_like.dtype)print("ones_like value:\n", ones_like)print(np.zeros_like(data))print(np.full_like(data, 6))# 创建规则数据print("python range:", list(range(5)))print("numpy arange:", np.arange(5))print("python range:", list(range(3, 10, 2)))print("numpy arange:", np.arange(3, 10, 2))# (start, end, num)print("linspace:", np.linspace(-1, 1, 5))print("5 segments:", np.linspace(-1, 1, 5, endpoint=False))# 快速创建再添加值print(np.empty([4, 3]))t0 = time.time()for _ in range(1000):_ = np.ones([100, 100])t1 = time.time()for _ in range(1000):_ = np.empty([100, 100])t2 = time.time()print("ones time:", t1 - t0)print("empty time:", t2 - t1)print()# 快速初始化对应形状的数据empty1 = np.empty([2, 3], dtype=float)print("empty before:\n", empty1)data = np.arange(6).reshape([2, 3])print(data)for i in range(data.shape[0]):for j in range(data.shape[1]):empty1[i, j] = data[i, j] * random.random()print("empty after:\n", empty1)# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('标准数据生成')# See PyCharm help at https://www.jetbrains.com/help/pycharm/
复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。
Hi, 标准数据生成
zeros:[[0. 0. 0.][0. 0. 0.]]
ones:[[1. 1.][1. 1.][1. 1.]]
[[9 9 9][9 9 9]]
ones: (2, 3) int64
ones_like: (2, 3) int64
ones_like value:[[1 1 1][1 1 1]]
[[0 0 0][0 0 0]]
[[6 6 6][6 6 6]]
python range: [0, 1, 2, 3, 4]
numpy arange: [0 1 2 3 4]
python range: [3, 5, 7, 9]
numpy arange: [3 5 7 9]
linspace: [-1. -0.5 0. 0.5 1. ]
5 segments: [-1. -0.6 -0.2 0.2 0.6]
[[0. 0. 0.][0. 0. 0.][0. 0. 0.][0. 0. 0.]]
ones time: 0.002431154251098633
empty time: 0.00015401840209960938
empty before:[[3.e-323 3.e-323 3.e-323][3.e-323 3.e-323 3.e-323]]
[[0 1 2][3 4 5]]
empty after:[[0. 0.8510451 0.21886624][1.83377276 1.97903545 2.67662559]]
七 源码地址
代码地址:
国内看 Gitee 之 numpy/标准数据生成.py
国外看 GitHub 之 numpy/标准数据生成.py
引用 莫烦 Python