【Numpy】(1)创建数组

2 阅读5分钟

NumPy 是 Python 的一个开源数值计算扩展库,用于高性能的科学计算和数据分析。它提供了一个强大的N维数组对象ndarray,以及用于对这些数组进行操作的各种函数。

通过pip安装:

pip install numpy

创建数组

从列表创建

numpy.array可以通过多种方式创建,最直接的方式是使用np.array函数,将Python列表或元组转换为ndarray对象。

import numpy as np

# 从列表创建数组
arr_from_list = np.array([1, 2, 3, 4, 5])
print(arr_from_list)
# 输出:[1 2 3 4 5]

# 从嵌套列表创建二维数组
arr_from_nested_list = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_from_nested_list)
# 输出:
# [[1 2 3]
#  [4 5 6]]

在创建numpy.array时,可以通过dtype参数指定数组元素的数据类型。NumPy提供了丰富的数据类型,包括intfloatcomplexboolobject等。

arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_float = np.array([1, 2, 3], dtype=np.float64)
print("整型数组:", arr_int.dtype)
print("浮点型数组:", arr_float.dtype)

使用内置函数创建

NumPy提供了多个内置函数来创建特定内容的数组。

np.zerosnp.ones

np.zerosnp.ones是NumPy库中的两个非常基础且常用的函数,它们分别用于创建元素全部为0和全部为1的数组。

np.zeros

np.zeros函数用于创建一个给定形状和类型的新数组,其中的元素全部初始化为0。

numpy.zeros(shape, dtype=float, order='C')
  • shape:整数或整数元组,指定数组的形状。
  • dtype:数据类型,可选。默认为float
  • order:{'C', 'F'},可选。指定数组在内存中的存储顺序。'C'意味着按行C风格顺序存储,'F'意味着按列Fortran风格顺序存储。默认是'C'。
import numpy as np

# 创建一个形状为(3, 4)的全0数组
arr_zeros = np.zeros((3, 4))
print(arr_zeros)
np.ones

np.ones函数用于创建一个给定形状和类型的新数组,其中的元素全部初始化为1。

numpy.ones(shape, dtype=float, order='C')

参数与np.zeros相同。

import numpy as np

# 创建一个形状为(2, 3)的全1数组
arr_ones = np.ones((2, 3))
print(arr_ones)

np.arange

创建一系列数值的数组。

# 创建一个从0到9的数组
range_arr = np.arange(10)
print(range_arr)

# 创建一个从10到19的间隔为2的数组
range_step_arr = np.arange(10, 20, 2)
print(range_step_arr)

np.linspace

用于生成一个等差数列。这个函数非常适合在需要生成特定范围内的固定大小样本时使用,比如在绘图、科学计算等场景下非常有用。linspace() 函数能够确保开始点和结束点被包括在内。

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数解释
  • start: 序列的起始值。
  • stop: 序列的终止值,除非endpoint设置为False,否则此值会包括在数列中。
  • num: 要生成的等间隔样本数量,默认为50。
  • endpoint: 布尔值,如果为True,则数列包含stop值;如果为False,则不包含,stop是数列的上限。
  • retstep: 布尔值,如果为True,则返回样本之间的步长以及样本数组。
  • dtype: 数组的类型。如果未给出,则将从其他输入参数中推断数据类型。
  • axis: 返回的数组中,样本是沿着指定轴排列的。

下面是使用numpy.linspace()函数的一些基本示例。

生成简单的等差数列
import numpy as np

# 生成从0到10的10个数字
arr = np.linspace(0, 10, 10)
print(arr)
不包含终止值的数列
# 生成从0到10的10个数字,但不包括10
arr = np.linspace(0, 10, 10, endpoint=False)
print(arr)
获取步长

如果你需要了解数列中各个点之间的间隔大小,可以设置retstep=True

# 生成数列并返回步长
arr, step = np.linspace(0, 10, 10, retstep=True)
print("Array:", arr)
print("Step size:", step)
在绘图中的应用

linspace() 在绘图和数学计算中特别有用。比如,当你需要绘制数学函数图像时,你可能需要一个密集的点集来代表X轴上的值,以便函数图像看起来平滑。

import matplotlib.pyplot as plt

x = np.linspace(0, 4*np.pi, 100) # 生成0到4π之间的100个点
y = np.sin(x) # 计算每个点的正弦值

plt.plot(x, y)
plt.show()

np.full

用于创建一个给定形状和类型的新数组,其特点是可以指定数组中每个元素的填充值。这使得np.full在需要初始化一个具有特定大小和初始值的数组时非常有用。

np.full函数的基本语法如下:

numpy.full(shape, fill_value, dtype=None, order='C')
  • shape:整数或整数元组,用于指定新数组的形状。
  • fill_value:标量值,用于填充数组中的每个元素。
  • dtype:数据类型,可选。如果未指定,则自动推断fill_value的数据类型。
  • order:{'C', 'F'},指定数组在内存中的存储顺序。'C'意味着按行C风格顺序存储,而'F'意味着按列Fortran风格顺序存储。默认是'C'。

示例1:基础示例

import numpy as np

# 创建一个形状为(3, 4)且填充值为5的数组
arr_full = np.full((3, 4), 5)
print(arr_full)

# 输出:
# [[5 5 5 5]
#  [5 5 5 5]
#  [5 5 5 5]]

这个示例创建了一个3行4列,所有元素都被填充为5的数组。

示例2:指定数据类型

import numpy as np

# 创建一个形状为(2, 2)、填充值为7.0、数据类型为float的数组
arr_full_float = np.full((2, 2), 7.0, dtype=np.float32)
print(arr_full_float)

# 输出:
# [[7. 7.]
#  [7. 7.]]

在这个示例中,通过指定dtypenp.float32,创建了一个所有元素都是7.0的浮点数组。

示例3:使用np.full_like

np.full_like函数可以基于现有的数组创建一个新数组,新数组具有相同的形状和类型,但所有元素的值都被设置为指定的填充值。

import numpy as np

# 创建一个初始数组
arr_initial = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)

# 使用np.full_like创建一个形状相同但填充值为-1的数组
arr_full_like = np.full_like(arr_initial, -1)
print(arr_full_like)

# 输出:
# [[-1 -1 -1]
#  [-1 -1 -1]]

特殊数组

np.eye

创建一个单位矩阵。

# 创建一个3x3的单位矩阵
eye_arr = np.eye(3)
print(eye_arr)

np.empty

创建一个未初始化的数组。这种方式创建的数组内容是不确定的,取决于内存的状态。

# 创建一个形状为(2,2)的未初始化数组
empty_arr = np.empty((2, 2))
print(empty_arr)