Python NumPy 标准数据生成:高效创建与操作数组
文章目录
本文介绍如何使用 Python 的 NumPy 库高效生成各种标准数据数组,包括全零、全一、指定数值的数组,以及根据现有数组形状快速创建新数组。我们探讨了常用的数组创建方法,如 np.zeros()
、np.ones()
、np.full()
等,展示了如何使用 np.arange()
和 np.linspace()
生成规则数据。通过 np.empty()
方法可以快速初始化数组,占用更少时间,非常适用于大规模数据的初始化和后续赋值操作。本文为你提供创建高效且灵活的数据数组的完整指南。
导入 numpy
import numpy as np
一 主要涉及功能
二 初始化数据
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 random
def 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)
# 复刻形状和类型
# 返回与给定数组具有相同形状和类型的数组,初始化值为 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))
# 创建规则数据
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