NumPy 数组使用大全
NumPy是一个Python库,用于Python编程中的科学计算。在本教程中,你将学习如何在NumPy数组上以多种方式添加、删除、排序和操作元素。
NumPy提供了一个多维数组对象和其他派生数组,例如掩码数组和掩码多维数组。
为什么要用NumPy
NumPy提供了一个ndarray对象,可以使用它来对任何维度的数组进行操作。ndarray代表N维数组,其中N是任意数字。这意味着NumPy数组可以是任何维度的。
与Python的List相比,NumPy具有许多优势。我们可以在NumPy阵列上执行高性能操作,例如:
- 对数组成员进行排序
- 数学和逻辑运算
- 输入/输出功能
- 统计和线性代数运算
安装NumPy
要安装NumPy,你的电脑上要先有Python和Pip。
在终端中运行以下命令:
pipinstallnumpy
然后你就可以在脚本中导入NumPy了,如下所示:
importnumpy
添加数组元素
可以用NumPy模块的append()方法向NumPy数组中添加元素。
append()的语法如下:
numpy.append(array,value,axis)
value会被追加到在数组的末尾,并返回一个包含所有元素的ndarray。
参数axis是一个可选的整数,用于定义数组的显示方式。如果没有指定,则数组结构将展平,稍后会演示用法。
以下示例,其中首先声明数组,然后用append方法向数组添加更多的值:
importnumpy a=numpy.array([1,2,3]) newArray=numpy.append(a,[10,11,12]) print(newArray) #输出:[123101112]
添加一列
也可以用NumPy的append()方法插入一列。
在下面的例子中,我们创建了一个二维数组并插入了两列:
importnumpy a=numpy.array([[1,2,3],[4,5,6]]) b=numpy.array([[400],[800]]) newArray=numpy.append(a,b,axis=1) print(newArray) """ 输出: [[123400] [456800]] """
如果没有使用axis参数,则会输出:
[123456400800]
这就是数组结构的扁平化。
在NumPy中,还可以用insert()方法插入元素或列。两者之间的区别在于insert()方法可以指定要在哪个索引处添加元素,但append()方法会在数组的末尾添加一个值。
Considertheexamplebelow:
考虑以下示例:
importnumpy a=numpy.array([1,2,3]) newArray=numpy.insert(a,1,90) print(newArray) #输出:[19023]
这里insert()方法在索引1处添加元素。在Python中数组索引从0开始。
追加一行
也可以用append()方法向数组添加行,就像在数组中附加元素一样简单:
importnumpy a=numpy.array([[1,2,3],[4,5,6]]) newArray=numpy.append(a,[[50,60,70]],axis=0) print(newArray) """ 输出“ [[123] [456] [506070]] """
删除元素
可以用NumPy模块的delete()方法删除NumPy数组元素:
importnumpy a=numpy.array([1,2,3]) newArray=numpy.delete(a,1,axis=0) print(newArray) #输出:[13]
在本例子中,我们有一个一维数组,用delete()方法从数组中删除了索引1处的元素。
删除一行
同样,你也可以用delete()方法删除行。
下面的例子中我们从二维数组中删除了一行:
importnumpy a=numpy.array([[1,2,3],[4,5,6],[10,20,30]]) newArray=numpy.delete(a,1,axis=0) print(newArray) """ 输出: [[123] [102030]] """
在delete()方法中,首先给出数组,然后给出要删除的元素的索引。在上例中,我们删除了索引为1的元素。
检查NumPy数组是否为空
可以用size方法返回数组中元素的总数。
在下面的例子中有一个if语句,通过ndarray.size检查数组中是否有元素,其中ndarray可以是任何给定的NumPy数组:
importnumpy a=numpy.array([1,2,3]) if(a.size==0): print("ThegivenArrayisempty") else: print("Thearray=",a) #输出:Thearray=[123]
在上面的代码中,数组中有三个元素,因此它不是空的,判断条件将返回false。如果数组中没有元素,则if条件会变为true并且将打印空消息。如果数组等于:
a=numpy.array([])
上述代码将会输出:
ThegivenArrayisempty
查找值的索引
要查找值对应的索引,可以用NumPy模块的where()方法,如下例所示:
importnumpy a=numpy.array([1,2,3,4,5]) print("5isfoundatindex:",numpy.where(a==5)) #输出:5isfoundatindex:(array([4]),)
如果你只想得到索引,可以这样写:
importnumpy a=numpy.array([1,2,3,4,5]) index=numpy.where(a==5) print("5isfoundatindex:",index[0]) #输出:5isfoundatindex:[4]
NumPy数组切片
数组切片是从给定数组中提取子集的过程。你可以用冒号(:)运算符对数组进行切片,并指定数组索引的开始和结束位置,例如:
array[from:to]
下面的例子中提取从索引2到索引5的元素:
importnumpy a=numpy.array([1,2,3,4,5,6,7,8]) print("Asubsetofarraya=",a[2:5]) #输出:Asubsetofarraya=[345]
如果想要提取最后三个元素,可以通过用负切片来完成操作,如下所示:
importnumpy a=numpy.array([1,2,3,4,5,6,7,8]) print("Asubsetofarraya=",a[-3:]) #输出:Asubsetofarraya=[678]
将函数作用于所有数组元素
在下面的例子中,我们将创建一个lambda函数,并传入一个数组,以其应用于所有元素:
importnumpy addition=lambdax:x+2 a=numpy.array([1,2,3,4,5,6]) print("Arrayafteradditionfunction:",addition(a)) #输出:Arrayafteradditionfunction:[345678]
在此例中,创建了一个lambda函数,它使每个元素都递增2。
NumPy数组的长度
要得到NumPy数组的长度,可以用size属性,如下所示:
importnumpy a=numpy.array([1,2,3,4,5,6]) print("Thesizeofarray=",a.size) #输出:Thesizeofarray=6
从list创建NumPy数组
假设你有一个列表:
l=[1,2,3,4,5]
现在要根据这个列表创建一个数组,可以用NumPy模块的array()方法:
importnumpy l=[1,2,3,4,5] a=numpy.array(l) print("TheNumPyarrayfromPythonlist=",a) #输出:TheNumPyarrayfromPythonlist=[12345]
同样,使用array()方法,也可以从元组创建NumPy数组。如下所示:
importnumpy t=(1,2,3,4,5) a=numpy.array(t) print("TheNumPyarrayfromPythonTuple=",a) #输出:TheNumPyarrayfromPythonTuple=[12345]
将NumPy数组转换为list
要将数组转换为list,可以使用NumPy模块的tolist()方法。
importnumpy a=numpy.array([1,2,3,4,5]) print("Arraytolist=",a.tolist()) #输出:Arraytolist=[1,2,3,4,5]
在这段代码中,我们简单地调用了tolist()方法,该方法将数组转换为列表。然后将新创建的列表打印到输出屏幕。
把NumPy数组导出为CSV
要将数组导出为CSV文件,可以用NumPy模块的savetxt()方法,如下所示:
importnumpy 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数组排序
可以用NumPy模块的sort()方法对NumPy数组进行排序:
sort()函数有一个可选参数axis(整数),默认为-1。axis指定我们要对数组进行排序的轴。-1表示将根据最后一个轴对数组进行排序。
importnumpy a=numpy.array([16,3,2,6,8,10,1]) print("Sortedarray=",numpy.sort(a)) #输出:Sortedarray=[123681016]
在这个例子中,我们在print语句中调用了sort()方法。数组a被传递给sort函数。
归一化数组
归一化数组是指将数组的值置于某个定义范围的过程。例如,我们想要在-1和1之间对数组进行归一化,依此类推。
归一化的公式如下:
x=(x–xmin)/(xmax–xmin)
现在把这个公式用于我们的数组。要查找数组中的最大和最小项,可以分别用NumPy的max()和min()方法。
importnumpy x=numpy.array([400,800,200,700,1000,2000,300]) xmax=x.max() xmin=x.min() x=(x-xmin)/(xmax-xmin) print("Afternormalizationarrayx=\n",x) """ 输出: Afternormalizationarrayx= [0.111111110.333333330.0.277777780.444444441. 0.05555556] """
数组索引
索引指向数组中的一个元素。在下面的例子中,分别用到了一维和二维数组中的索引:
importnumpy a=numpy.array([20,13,42,86,81,9,11]) print("Elementatindex3=",a[3]) #输出:Elementatindex3=86
下面是二维数组:
importnumpy a=numpy.array([[20,13,42],[86,81,9]]) print("Elementatindexa[1][2]=",a[1][2]) #输出:Elementatindexa[1][2]=9
索引[1][2]表示第二行和第三列(索引从0开始)。因此在屏幕上输出9。
将NumPy数组附加到另一个数组上
可以用append()方法将NumPy数组附加到另一个NumPy数组上。
importnumpy a=numpy.array([1,2,3,4,5]) b=numpy.array([10,20,30,40,50]) newArray=numpy.append(a,b) print("Thenewarray=",newArray) #输出:Thenewarray=[123451020304050]
在此例中,创建两个NumPy数组a,b。然后把两个数组传给append()。当数组b作为第二个参数传递时,将被添加到数组a的末尾。
总结
正如大家所见,NumPy数组用起来非常简单。在使用很多机器学习库时,NumPy数组非常重要。可以说NumPy是人工智能的大门。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。