Python NumPy 标准数据生成:高效创建与操作数组

本文介绍如何使用 Python 的 NumPy 库高效生成各种标准数据数组,包括全零、全一、指定数值的数组,以及根据现有数组形状快速创建新数组。我们探讨了常用的数组创建方法,如 np.zeros()np.ones()np.full() 等,展示了如何使用 np.arange()np.linspace() 生成规则数据。通过 np.empty() 方法可以快速初始化数组,占用更少时间,非常适用于大规模数据的初始化和后续赋值操作。本文为你提供创建高效且灵活的数据数组的完整指南。

导入 numpy

import numpy as np

一 主要涉及功能

二 初始化数据

1 初始值为 01 的数据
# 初始化 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]]

七 源码地址

代码地址:

国内看 Giteenumpy/标准数据生成.py

国外看 GitHubnumpy/标准数据生成.py

引用 莫烦 Python

09-29 22:53