NumPy 是一个Python 库,用于 Python 编程中的科学计算。在本教程中,你将学习如何在 NumPy 数组上以多种方式添加、删除、排序和操做元素。python
NumPy 提供了一个多维数组对象和其余派生数组,例如掩码数组和掩码多维数组。编程
NumPy 提供了一个 ndarray 对象,可使用它来对任何维度的数组进行操做。 ndarray 表明 N 维数组,其中 N 是任意数字。这意味着 NumPy 数组能够是任何维度的。数组
与 Python 的 List 相比,NumPy 具备许多优点。咱们能够在 NumPy 阵列上执行高性能操做,例如:bash
要安装NumPy,你的电脑上要先有 Python 和 Pip。app
在终端中运行如下命令:机器学习
pip install numpy
而后你就能够在脚本中导入 NumPy 了,以下所示:ide
import numpy
能够用 NumPy 模块的 append()
方法向 NumPy 数组中添加元素。函数
append()
的语法以下:性能
numpy.append(array, value, axis)
value
会被追加到在数组的末尾,并返回一个包含全部元素的 ndarray。学习
参数 axis
是一个可选的整数,用于定义数组的显示方式。若是没有指定,则数组结构将展平,稍后会演示用法。
如下示例,其中首先声明数组,而后用 append
方法向数组添加更多的值:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.append (a, [10, 11, 12]) print(newArray) # 输出:[ 1 2 3 10 11 12]
也能够用NumPy 的 append()
方法插入一列。
在下面的例子中,咱们建立了一个二维数组并插入了两列:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6]]) b = numpy.array([[400], [800]]) newArray = numpy.append(a, b, axis = 1) print(newArray) """ 输出: [[ 1 2 3 400] [ 4 5 6 800]] """
若是没有使用 axis
参数,则会输出:
[ 1 2 3 4 5 6 400 800]
这就是数组结构的扁平化。
在 NumPy 中,还能够用 insert()
方法插入元素或列。 二者之间的区别在于 insert()
方法能够指定要在哪一个索引处添加元素,但 append()
方法会在数组的末尾添加一个值。
Consider the example below:
考虑如下示例:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.insert(a, 1, 90) print(newArray) # 输出:[ 1 90 2 3]
这里 insert()
方法在索引1处添加元素。在Python中数组索引从0开始。
也能够用 append()
方法向数组添加行,就像在数组中附加元素同样简单:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6]]) newArray = numpy.append(a, [[50, 60, 70]], axis = 0) print(newArray) """ 输出“ [[ 1 2 3] [ 4 5 6] [50 60 70]] """
能够用 NumPy 模块的 delete()
方法删除 NumPy 数组元素:
import numpy a = numpy.array([1, 2, 3]) newArray = numpy.delete(a, 1, axis = 0) print(newArray) # 输出:[1 3]
在本例子中,咱们有一个一维数组,用 delete()
方法从数组中删除了索引 1 处的元素。
一样,你也能够用 delete()
方法删除行。
下面的例子中咱们从二维数组中删除了一行:
import numpy a = numpy.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]]) newArray = numpy.delete(a, 1, axis = 0) print(newArray) """ 输出: [[ 1 2 3] [10 20 30]] """
在 delete()
方法中,首先给出数组,而后给出要删除的元素的索引。在上例中,咱们删除了索引为 1 的元素。
能够用 size
方法返回数组中元素的总数。
在下面的例子中有一个 if 语句,经过 ndarray.size
检查数组中是否有元素,其中 ndarray 能够是任何给定的 NumPy 数组:
import numpy a = numpy.array([1, 2, 3]) if(a.size == 0): print("The given Array is empty") else: print("The array = ", a) # 输出:The array = [1 2 3]
在上面的代码中,数组中有三个元素,所以它不是空的,判断条件将返回false。若是数组中没有元素,则 if 条件会变为 true 而且将打印空消息。若是数组等于:
a = numpy.array([])
上述代码将会输出:
The given Array is empty
要查找值对应的索引,能够用 NumPy 模块的 where()
方法,以下例所示:
import numpy a = numpy.array([1, 2, 3, 4, 5]) print("5 is found at index: ", numpy.where(a == 5)) # 输出:5 is found at index: (array([4]),)
若是你只想获得索引,能够这样写:
import numpy a = numpy.array([1, 2, 3, 4, 5]) index = numpy.where(a == 5) print("5 is found at index: ", index[0]) #输出: 5 is found at index: [4]
数组切片是从给定数组中提取子集的过程。你能够用冒号( :
)运算符对数组进行切片,并指定数组索引的开始和结束位置,例如:
array[from:to]
下面的例子中提取从索引 2 到索引 5 的元素:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8]) print("A subset of array a = ", a[2:5]) # 输出:A subset of array a = [3 4 5]
若是想要提取最后三个元素,能够经过用负切片来完成操做,以下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8]) print("A subset of array a = ", a[-3:]) # 输出:A subset of array a = [6 7 8]
在下面的例子中,咱们将建立一个 lambda 函数,并传入一个数组,以其应用于全部元素:
import numpy addition = lambda x: x + 2 a = numpy.array([1, 2, 3, 4, 5, 6]) print("Array after addition function: ", addition(a)) # 输出:Array after addition function: [3 4 5 6 7 8]
在此例中,建立了一个 lambda 函数,它使每一个元素都递增 2。
要获得 NumPy 数组的长度,能够用 size
属性,以下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5, 6]) print("The size of array = ", a.size) # 输出:The size of array = 6
假设你有一个列表:
l = [1, 2, 3, 4, 5]
如今要根据这个列表建立一个数组,能够用 NumPy 模块的 array()
方法:
import numpy l = [1, 2, 3, 4, 5] a = numpy.array(l) print("The NumPy array from Python list = ", a) # 输出:The NumPy array from Python list = [1 2 3 4 5]
一样,使用 array()
方法,也能够从元组建立 NumPy 数组。以下所示:
import numpy t = (1, 2, 3, 4, 5) a = numpy.array(t) print("The NumPy array from Python Tuple = ", a) # 输出:The NumPy array from Python Tuple = [1 2 3 4 5]
要将数组转换为list,可使用 NumPy 模块的 tolist()
方法。
import numpy a = numpy.array([1, 2, 3, 4, 5]) print("Array to list = ", a.tolist()) # 输出:Array to list = [1, 2, 3, 4, 5]
在这段代码中,咱们简单地调用了 tolist()
方法,该方法将数组转换为列表。而后将新建立的列表打印到输出屏幕。
要将数组导出为 CSV 文件,能够用 NumPy 模块的 savetxt()
方法,以下所示:
import numpy a = numpy.array([1, 2, 3, 4, 5]) numpy.savetxt("myArray.csv", a)
此代码将在 Python 代码文件所在路径下生成 CSV 文件。固然你也能够指定路径。
该文件的内容以下:
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00
你能够把额外填充的零删除,以下所示:
numpy.savetxt("myArray.csv", a,fmt='%.2f')
能够用 NumPy 模块的 sort()
方法对 NumPy 数组进行排序:
sort()
函数有一个可选参数 axis
(整数),默认为 -1
。axis
指定咱们要对数组进行排序的轴。 -1
表示将根据最后一个轴对数组进行排序。
import numpy a = numpy.array([16, 3, 2, 6, 8, 10, 1]) print("Sorted array = ", numpy.sort(a)) # 输出:Sorted array = [ 1 2 3 6 8 10 16]
在这个例子中,咱们在 print 语句中调用了 sort()
方法。数组 a
被传递给 sort
函数。
归一化数组是指将数组的值置于某个定义范围的过程。例如,咱们想要在 -1 和 1 之间对数组进行归一化,依此类推。
归一化的公式以下:
x = (x – xmin) / (xmax – xmin)
如今把这个公式用于咱们的数组。要查找数组中的最大和最小项,能够分别用 NumPy 的 max()
和 min()
方法。
import numpy x= numpy.array([400, 800, 200, 700, 1000, 2000, 300]) xmax = x.max() xmin = x.min() x = (x - xmin)/(xmax - xmin) print("After normalization array x = \n", x) """ 输出: After normalization array x = [0.11111111 0.33333333 0. 0.27777778 0.44444444 1. 0.05555556] """
索引指向数组中的一个元素。在下面的例子中,分别用到了一维和二维数组中的索引:
import numpy a = numpy.array([20, 13, 42, 86, 81, 9, 11]) print("Element at index 3 = ", a[3]) # 输出:Element at index 3 = 86
下面是二维数组:
import numpy a = numpy.array([[20, 13, 42], [86, 81, 9]]) print("Element at index a[1][2] = ", a[1][2]) # 输出:Element at index a[1][2] = 9
索引 [1][2]
表示第二行和第三列(索引从 0
开始)。所以在屏幕上输出 9
。
能够用 append()
方法将 NumPy 数组附加到另一个 NumPy 数组上。
import numpy a = numpy.array([1, 2, 3, 4, 5]) b = numpy.array([10, 20, 30, 40, 50]) newArray = numpy.append(a, b) print("The new array = ", newArray) # 输出:The new array = [ 1 2 3 4 5 10 20 30 40 50]
在此例中,建立两个 NumPy 数组 a
, b
。而后把两个数组传给 append()
。当数组 b
做为第二个参数传递时,将被添加到数组 a
的末尾。
正如你们所见,NumPy 数组用起来很是简单。在使用不少机器学习库时,NumPy 数组很是重要。能够说NumPy 是人工智能的大门。