这篇文章提供了在 Python 中开始使用 NumPy 的介绍性文档。
# 将 numpy 导入此 python 脚本 import numpy # 构建一些列表并使用 Python 基础库添加它们 a = [1,2,3] b = [1,2,3] a+b
[1, 2, 3, 1, 2, 3]
# 用 numpy 声明一个数组 a_np = numpy.array([1,2,3]) # 检查数组的类型以确认它是一个 numpy 数组 type(a_np)
numpy.ndarray
# numpy数组有一个属性.dtype,可以让你检查数组 a_np.dtype的numpy数据类型
dtype('int32')
# a_np 是整数类型;让我们尝试分配一个 float a_np[0] = 13.33 a_np
数组([13, 2, 3])
# numpy数组有一个.ndim属性,可以让你看到数组的维数 a_np.ndim
1个
# numpy 数组也有一个 .size 属性; # .size 允许您查看数组 a_np.size包含的元素数
3个
# 当使用 numpy 数组时,数学在元素方面成为可能 # -- 创建第二个 numpy 数组来测试一些元素方面的数学运算 b_np = numpy.array([2,3,4]) # 添加 a_np + b_np
阵列([11,-1,-1])
# 减法 a_np - b_np
阵列([11,-1,-1])
# 乘法 a_np * b_np
数组([26, 6, 12])
# 一个的幂 a_np ** b_np
数组([169, 8, 81], dtype=int32)
# 划分 a_np / b_np
阵列([6.5,0.66666667,0.75])
#模;测试 a_np 模 2 a_np % numpy.array([2,2,2])
数组 ([1, 0, 1], dtype=int32)
#模;测试 b_np 模 2 b_np % numpy.array([2,2,2])
数组([0, 1, 0], dtype=int32)
# numpy 允许使用“通用函数”; # universal functions work element-wise, with numpy arrays # 一个例子是 .sin numpy.sin(a_np)
阵列([0.42016704,0.90929743,0.14112001])
# 另一个例子是 .sqrt numpy.sqrt(a_np)
阵列([3.60555128,1.41421356,1.73205081])
# 使用 numpy 构建二维数据表 c_np = numpy.array([[1,2,3], [4,5,6]]) c_np
数组([[1, 2, 3], [4, 5, 6]])
# 索引,即获取存储在定义单元格中的值; # 此处:第一行第一列的单元格 c_np[0][0]
1个
# 这里:最后一行的单元格,最后一列 c_np[-1][-1]
6个
# 此处:第二行第一列的单元格 c_np[1][0]
4个
# 执行上述操作的另一种方法 c_np[1,0]
4个
# 对简单的一维 numpy 数组进行切片 # 此处:在 d_np 中获取第二个和第三个值 d_np = numpy.array([7,9,11]) d_np[1:3]
数组([ 9, 11])
# 获取第一个和第三个元素 d_np[0:3:2] # from:to:step
数组([ 7, 11])
# 此处:获取 d_np d_np[::2]中的所有其他元素
数组([ 7, 11])
# 这里:获取每三个元素 d_np[::3]
阵列([7])
# 我们可以使用 .arange 创建一维数组,这是 numpy 模块中的一种方法 e_np = numpy.arange(0,26) #param1: from; param2:to(排除最后一个值) e_np
数组([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 , 24, 25])
# 让我们检查一下 e_np 的 类型 type(e_np)
numpy.ndarray
# numpy 数组可以重新整形,使用 numpy .reshape 方法 f_np = e_np.reshape(2,13) #param1:行数;param2: f_np的列数
数组([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18, 19, 20, 21, 22、23、24、25]])
# 我不仅可以使用 .reshape 从 1D 创建 2D; # 例如看这个 g_np = numpy.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape(3,2,2) g_np
array([[[ 1, 2], [ 3, 4]], [[ 5, 6], [ 7, 8]], [[ 9, 10], [11, 12]]])
# g_np 也不是 3D 的;让我们从这个数据立方体中切出一些维度 # 第二个维度的第一个方向上的所有值 g_np[:,0,:]
array([[ 1, 2], [ 5, 6], [ 9, 10]])
# 一个特定的单元格;所有维度中的第一个 g_np[0,0,0]
1个
# 一个特定的单元格;最后在所有维度 g_np[-1,-1,-1]
12
# 一个特定的单元格;所有维度中倒数第二个 g_np[-2,-2,-2]
5个
# 让我们用另一个例子来完成关于 numpy 的第一个教程; # 我创建了一个二维数组并展示给你 example = numpy.array([[1,2,3,4,5], [1.1,2.2,3.3,4.4,5.5], [1.11,2.22,3.33,4.44 ,5.55], [1.111,2.222,3.333,4.444,5.555], [1.1111,2.2222,3.3333,4.4444,5.5555]]) 例子
array([[1., 2., 3., 4., 5.], [1.1, 2.2, 3.3, 4.4, 5.5], [1.11, 2.22, 3.33, 4.44, 5.55], [1.111, 2.222, 3.333 , 4.444 , 5.555 ], [1.1111, 2.2222, 3.3333, 4.4444, 5.5555]])
# 现在让我们访问值 2.2、4.4、2.222 和 4.444 - 仅在一行代码 示例中 [1::2,1::2]
阵列([[2.2,4.4], [2.222,4.444]])
# 现在举几个例子当你 通过引用复制时会发生什么 a_np = numpy.array([1,2,3]) b_np = a_np[:1] b_np
阵列([1])
# 改变 b_np 元素 b_np[0] = 10000 b_np
阵列([10000])
# 让我们 npw 检查 a_np a_np
数组([10000, 2, 3])
# 以上是引用复制的效果; # 当我们对 numpy 数组进行切片时会发生这种情况; # 标准 python 列表会发生这种情况吗? a = [1,2,3] b = a[:1] b[0] = 1000 a
[1, 2, 3]
# 在 pyhton 中切片默认列表时不会发生按引用复制; # 如果我们不想通过引用复制,那么我们可以使用 .copy() 方法,作为 numpy 的一部分 c_np = numpy.array([1,2,3,4,5]) d_np = c_np.copy() d_np [0] = 10000 c_np[0] = 99999 # 现在检查 c_np print("this is c_np:" + str(c_np))
这是 c_np:[99999 2 3 4 5]
# d_np 呢? d_np
数组([10000, 2, 3, 4, 5])
# 使用 .copy() 进行复制允许使用两个具有独立引用的对象;

专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply