python数据分析(三) python numpy--数组--运算,切片和索引

Numpy数组的运算:

numpy数组最大的特点是任何运算,都会自动的对数组当中的所有变量进行运算,所以千万不要试图自己去使用循环去取数组当中的值进行运算(非常愚蠢)。

1.相同大小的数组之间的运算

数组可以不编写循环而对数据执行批量运算,称之为矢量化,大小相同数组之间的算术运算将会应用到元素级。

In [51]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])
In [52]: arr
Out[52]:
array([[ 1.,2.,3.],
[ 4.,5.,6.]])
In [53]: arr * arr
Out[53]:
array([[1.,4.,9.],
[ 16.,25.,36.]])
In [54]: arr - arr
Out[54]:
array([[ 0.,0.,0.],
[ 0.,0.,0.]])

2.大小不同的数组之间的运算

大小不同的数组之间的运算叫做广播,本教程暂时不涉及该内容。

3.标量与数组之间的运算

数组与标量值之间的运算,会将标量值传播到各个元素

In [55]: 1 / arr
Out[55]:
array([[ 1.,0.5,0.3333],
    [ 0.25,0.2,0.1667]])
In [56]: arr ** 0.5
Out[56]:
array([[ 1.,1.4142,1.7321],
    [ 2.,2.2361,2.4495]])
        

Numpy数组的索引和切片

keypoint:

1.Numpy的切片非常重要的一点是,numpy的切片是原数组的视图,而不是副本,这也就意味着对于切片的赋值和修改会直接反映到原数组当中,这样设计的目的是由于,由于numpy处理的都是大数据,如果需要复制的话会对内存造成多大的压力。

2.Numpy多维数组当中最常见的是二维数组,我们日常工作当中也主要是对二维数组进行操作,Numpy当中的轴是数组很重要的概念。0代表纵轴也就是行伸展的方向,numpy当中默认axis=0,也是基于日常数据处理通常是逐行进行数据处理,1代表横轴,是列的伸展,需要对列进行操作时,通常需要指定axis=1。

一维数组

一维数组的索引和切片与python当中的列表差不多

In [60]: arr = np.arange(10)
In [61]: arr
Out[61]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [62]: arr[5]
Out[62]: 5
In [63]: arr[5:8]
Out[63]: array([5, 6, 7])
In [64]: arr[5:8] = 12
In [65]: arr
Out[65]: array([ 0,1,2,3,4, 12, 12, 12,8,9])

多维数组

以二维数组为例

索引

单行索引

当你想要获取二维数组的某一行(注意是仅是单行)可以使用arr[],同时假如需要该行当中的某一列时可以采用arr[2][3]或者arr[2,3] 这两者是等价的

In [10]: data
Out[10]:
array([[ 1.0788974 ,  0.68102429,  1.25657144,  0.86003818],
       [ 0.12736723, -1.02105407, -1.73882805, -0.95977831],
       [ 1.72637531,  1.34888078, -0.30239276, -0.2500709 ],
       [ 1.35099747, -1.548361  ,  0.42033975, -0.45966589],
       [-1.33488847,  0.03941755,  1.62740521,  1.06397523],
       [ 0.24654034, -1.78687642, -1.48406199,  0.26911715],
       [-1.51003484, -0.00391514,  1.0792482 ,  1.4810209 ]])

In [15]: data[0]
Out[15]: array([1.0788974 , 0.68102429, 1.25657144, 0.86003818])

In [16]: data[0,2,4,6]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-16-6d104e373c35> in <module>
----> 1 data[0,2,4,6]

IndexError: too many indices for array
In [17]: data[0][2]
Out[17]: 1.25657144416686

In [18]: data[0,2]
Out[18]: 1.25657144416686

多行索引

当你需要数组其中的多行时,需要使用[[]]来制定需要的行

In [14]: data[[0,2,4,6]]
Out[14]:
array([[ 1.0788974 ,  0.68102429,  1.25657144,  0.86003818],
       [ 1.72637531,  1.34888078, -0.30239276, -0.2500709 ],
       [-1.33488847,  0.03941755,  1.62740521,  1.06397523],
       [-1.51003484, -0.00391514,  1.0792482 ,  1.4810209 ]])

同时很是特殊的一点是,当你想要其中的一些行与列时,你可能想到这样使用:arr[[1, 5, 7, 2], [0, 3, 1, 2]],但是你会发现得到是一个一维数组

In [22]: arr
Out[22]:
array([[ 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, 26, 27],
       [28, 29, 30, 31]])

In [23]: arr[[1, 5, 7, 2], [0, 3, 1, 2]]
Out[23]: array([ 4, 23, 29, 10])

当你想得到的这样的结果时,以下是其中一种方法:

In [24]: arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
Out[24]:
array([[ 4,  7,  5,  6],
       [20, 23, 21, 22],
       [28, 31, 29, 30],
       [ 8, 11,  9, 10]])

布尔型索引

原文地址:https://www.cnblogs.com/xiaosanye/p/11634475.html

时间: 2024-08-30 04:34:51

python数据分析(三) python numpy--数组--运算,切片和索引的相关文章

Python中numpy 数组的切片操作

Python中numpy 数组的切片操作简介取元素 X[n0,n1]切片 X[s0:e0,s1:e1]切片特殊情况 X[:e0,s1:]示例代码输出结果简介X[n0,n1]是通过 numpy 库引用二维数组或矩阵中的某一段数据集的一种写法.类似的,X[n0,n1,n2]表示取三维数组,取N维数组则有N个参数,N-1个逗号分隔.以二维数组为例: import numpy as npX = np.array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,

【Python实战15】NumPy数组的创建

NumPy提供了一个N维数组对象,即:ndarray.ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的. 创建ndarray数组 创建数组最简单的方式就是使用array函数,它接受一切序列型的对象,然后产生一个新的含有传入数据的NumPy数组.如下: 嵌套的序列将会被转换为一个多为数组: 除非显示的说明,np.array会尝试为新建的这个数组推断出一个较为合适的数据类型,我们可以通过dtype来进行查看,比如上面刚建立的数组类型为:int32类型:另,我们可以

Numpy学习:《Python数据分析基础教程NumPy学习指南第2版》中文PDF+英文PDF+代码

NumPy是一个优秀的科学计算库,提供了很多实用的数学函数.强大的多维数组对象和优异的计算性能,不仅可以取代Matlab和Mathematica的许多功能,而且业已成为Python科学计算生态系统的重要组成部分.但与这些商业产品不同,它是免费的开源软件. 推荐学习<Python数据分析基础教程NumPy学习指南第2版>,通过书中丰富的示例,学会Matplotlib绘图,并结合使用其他Python科学计算库(如SciPy和Scikits),让工作更有成效,让代码更加简洁而高效. 学习参考: &l

python运算学习之Numpy ------ 数组的切片索引与循环遍历、条件和布尔数组、

数组的切片索引: 数组的切片索引和列表非常类似,下面用代码简单说明 1 a = np.random.rand(16).reshape(4, 4) 2 print("数组a:\n", a) 3 print(a[-1][1:4]) 4 Out[1]: 5 数组a: 6 [[0.04175379 0.43013992 0.5398909 0.40638248] 7 [0.3305902 0.11958799 0.48680358 0.30755734] 8 [0.00893887 0.384

Numpy数组对象的操作-索引机制、切片和迭代方法

前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange(10,16) In [2]: a Out[2]: array([10, 11, 12, 13, 14, 15]) #使用正数作为索引 In [3]: a[3] Out[3]: 13 #还可以使用负数作为索引 In [4]: a[-4] Out[4]: 12 #方括号中传入多数索引值,可同时选择多个

python数据分析进阶之numpy

摘要 Numpy是利用python来进行数据分析中必须要掌握的基础.是高性能科学计算和数据分析的基础包.利用numpy能对整组数据无需循环就能进行快速的标准数学函数计算,同时能进行线性代数,随机数,以及傅里叶变换等等功能,而对于数据分析来说,比较重要的用途就是数据的清理,过滤,子集构造,转换,排序,描述统计等等. 创建多维数组 1.利用array来生成基本数组,如: >>> import numpy as np >>> a=np.array([1,2,3,4]) >

【Python 数据分析】module ‘numpy‘ has no attribute ‘array‘

安装好Numpy模块后,开始做了几个小测试都可以运行,但是当我创建numpy.py这个文件后 numpy.py import numpy y = numpy.array([[11,4,2],[2,6,1],[32,6,42]]) print(y) 运行后报错了: Traceback (most recent call last):   File "D:\Python_Reptile\numpy.py", line 1, in <module>     import nump

Numpy 数组的切片操作

实例+解释如下(表格):关键是要明白python中数组的下标体系.一套从左往右,一套从右往左. A=np.array([1,2,3,4,5,6,7,8,9,0]) 1 2 3 4 5 6 7 8 9 0 下标系一Index(Left to Right) 0 1 2 3 4 5 6 7 8 9 下标系二Index(Right to Left) -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 A[a:b:c] a和b   确定:切片操作的范围(from a to b, exclude

python爬虫(三)--Python的set()

如果你已经掌握了爬虫基础,看了我前面三个基础再来继续看这一篇文章.这篇文章主要讲解爬虫程序中必须要用到的python集合,如果你对集合很了解.那可以不用看. 在爬虫程序中,为了不重复爬取已经爬过的页面,我们需要把已经爬过的页面的url放进集合中,在每一次要爬取某一个url之前,先看看集合里面是否已经存在,如果已经存在跳过这个url,如果不存在我们把ur放进聚合中,然后再去爬取这个页面 python提供了set这种数据结构,set是一种无序的,不包含重复元素的结构,一般用来测试是否已经包含了某元素

numpy 数组运算

对数组做基本的算术运算,将会对整个数组的所有元组进行逐一运算,并将运算结果保存在一个新的数组内,而不会破坏原始的数组. >>> a = np.array( [20,30,40,50] ) >>> b = np.arange( 4 ) >>> b array([0, 1, 2, 3]) >>> c = a-b >>> c array([20, 29, 38, 47]) >>> b**2 array([