numpy使用数组进行数据处理

numpy使用数组进行数据处理

meshgrid函数

理解:

二维坐标系中,X轴可以取三个值1,2,3, Y轴可以取三个值7,8, 请问可以获得多少个点的坐标?
显而易见是6个:
(1,7)(2,7)(3,7)
(1,8)(2,8)(3,8)

>>> import numpy as np#导入numpy
>>> a=np.array([1,2,3])#创建一维数组
>>> b=np.array([7,8])
>>> res=np.meshgrid(a,b)#获取所有点的横坐标和纵坐标
>>> res#返回list,有两个元素,第一个元素是X轴的取值,第二个元素是Y轴的取值
[array([[1, 2, 3],
       [1, 2, 3]]), array([[7, 7, 7],
       [8, 8, 8]])]

生成坐标绘制图像:

>>> import numpy as np
>>> points=np.arange(-5,5,0.01)#从-5到5步长为0.01
>>> xs,ys=np.meshgrid(points,points)
>>> ys
array([[-5.  , -5.  , -5.  , ..., -5.  , -5.  , -5.  ],
       [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
       [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
       ...,
       [ 4.97,  4.97,  4.97, ...,  4.97,  4.97,  4.97],
       [ 4.98,  4.98,  4.98, ...,  4.98,  4.98,  4.98],
       [ 4.99,  4.99,  4.99, ...,  4.99,  4.99,  4.99]])
>>> z=np.sqrt(xs**2+ys**2)#函数的求值运算
>>> z
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
        7.06400028],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       ...,
       [7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
        7.04279774],
       [7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
        7.04985815],
       [7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
        7.05692568]])
>>> import matplotlib.pyplot as plt
>>> plt.imshow(z, cmap=plt.cm.gray); plt.colorbar()
<matplotlib.image.AxesImage object at 0x00000000087D6EB8>
<matplotlib.colorbar.Colorbar object at 0x000000000D8F4FD0>
>>> plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")
Text(0.5, 1.0, 'Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values')
>>>plt.show()

将条件逻辑表述为数组运算

根据cond中的值来对数组进行选取,如果cond中的值为True,那么就选择x中对应的值,否则就选择y中对应的值,比如cond[0]=True,那么result[0]处应当放置yarr[0]的值

>>> xarr=np.array([1.1,1.2,1.3,1.4,1.5])
>>> yarr=np.array([2.1,2.2,2.3,2.4,2.5])
>>> cond=np.array([True,False,True,True,False])
>>> result=[(x if c else y) for x,y,c in zip(xarr,yarr,cond)]
>>> result
[1.1, 2.2, 1.3, 1.4, 2.5]

where方法

使用矢量

where方法可以取代上面的写法

>>> result=np.where(cond,xarr,yarr)
>>> result
array([1.1, 2.2, 1.3, 1.4, 2.5])

使用标量

np.where的第二个和第三个参数不必是数组,它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。假设有一个由随机数据组成的矩阵,你希望将所有正值替换为2,将所有负值替换为-2。若利用np.where,则会非常简单:

>>> arr=np.random.randn(4,4)
>>> arr
array([[-0.02461196, -0.11867552,  0.49004256, -0.25236766],
       [ 1.66484493, -0.41180743, -0.34837293, -2.61422661],
       [ 0.51476568, -0.41451909,  1.28553372,  0.13866799],
       [-0.94795594, -1.49302099,  1.18480636,  0.20310613]])
>>> arr>0
array([[False, False,  True, False],
       [ True, False, False, False],
       [ True, False,  True,  True],
       [False, False,  True,  True]])
>>> np.where(arr>0,2,-2)
array([[-2, -2,  2, -2],
       [ 2, -2, -2, -2],
       [ 2, -2,  2,  2],
       [-2, -2,  2,  2]])

标量矢量结合

如果对应位置是True,那么新的数组对应位置为2,否则就还是原来的数值

>>> np.where(arr>0,2,arr)
array([[-0.02461196, -0.11867552,  2.        , -0.25236766],
       [ 2.        , -0.41180743, -0.34837293, -2.61422661],
       [ 2.        , -0.41451909,  2.        ,  2.        ],
       [-0.94795594, -1.49302099,  2.        ,  2.        ]])

数学统计方法

mean函数

对所有的元素求均值

>>> import numpy as np
>>> arr=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr.mean()
5.0
>>> np.mean(arr)
5.0

sum函数

对所有元素求和

>>> arr.sum()
45

可选轴求值

>>> arr.mean(axis=1)#列求平均值
array([2., 5., 8.])
>>> arr.mean(axis=0)#行求平均值
array([4., 5., 6.])
>>> arr.sum(axis=0)
array([12, 15, 18])#行求和
>>> arr.sum(axis=1)
array([ 6, 15, 24])#列求和

cumsum函数

1.对于一维输入a(可以是list,可以是array,假设a=[1, 2, 3, 4, 5, 6, 7] ,就是当前列之前的和加到当前列上,如下:

>>>import numpy as np
>>> a=[1,2,3,4,5,6,7]
>>> np.cumsum(a)
array([  1,   3,   6,  10,  15,  21,  28,  36,  45,  55,  75, 105])

2.对于二维输入a,axis=0(第1行不动,将第1行累加到其他行);axis=1(进入最内层,转化成列处理。第1列不动,将第1列累加到其他列),如下:

>>>import numpy as np
>>> c=[[1,2,3],[4,5,6],[7,8,9]]
>>> np.cumsum(c,axis=0)
array([[ 1,  2,  3],
       [ 5,  7,  9],
       [12, 15, 18]])
>>> np.cumsum(c,axis=1)
array([[ 1,  3,  6],
       [ 4,  9, 15],
       [ 7, 15, 24]])

cumprod函数

累乘方法同理

>>> arr.cumprod(axis=1)
array([[  1,   2,   6],
       [  4,  20, 120],
       [  7,  56, 504]], dtype=int32)

原文地址:https://www.cnblogs.com/mengxiaoleng/p/11620764.html

时间: 2024-11-09 02:08:34

numpy使用数组进行数据处理的相关文章

numpy基础--利用数组进行数据处理

1 利用数组进行数据处理 numpy数组可以将许多种数据处理任务表述为简洁的数组表达式,用数组表达式替换循环的做法,通常被称为矢量化. 例如:我们想要处理一组值(网格型)上计算函数sqrt(x^2 + y^2).np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对). 1 >>> a = np.array([1, 2, 3]) 2 >>> b = np.array([4, 5, 6]) 3 >>> ax,

python 工具 字符串转numpy浮点数组

不同的数字之间使用 空格“ ”,“$”,"*"等隔开,支持带小数点的字符串NumArray=str2num(LineString,comment='#')将字符串中的所有非Double类型的字符全部替换成空格 以'#'开头直至行尾的内容被清空 返回一维numpy.array数组 import numpy import scipy def str2num(LineString,comment='#'): from io import StringIO as StringIO import

python numpy基础 数组和矢量计算

在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率, 类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下简单的例子 import numpy as np data=np.array([2,5,6,8,3]) #构造一个简单的数组 print(data) 结果: [2 5 6 8 3] data1=np.array([[2,5,6,8,3],np.arange(5)])  #构建一个二维数组 print(d

Numpy用于数组的文件输入输出

这一章比较简单,内容也比较少.而且对于文件的读写,还是使用pandas比较好.numpy主要是读写文本数据和二进制数据的. 将数组以二进制的格式保存到硬盘上 主要的函数有numpy.save和numpy.load.默认情况下,数组是以未压缩的二进制保存为.npy的文件. In [1]: import numpy as np In [2]: arr = np.arange(10) In [3]: arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) I

numpy 字符数组

该部分内容见 1.6.4 字符数组Character arrays (numpy.char) 和 3.1.4 创建字符数组Creating character arrays (numpy.char) 原文地址:https://www.cnblogs.com/gengyi/p/9231360.html

numpy的数组的创建

import numpy as np # numpy创建有规律的一维数组(元组构成) l1 = np.arange(5) print(type(l1)) print(l1) # 打印结果 # <class 'numpy.ndarray'> # [0 1 2 3 4] #创建一个没有规律的一维数组(元组构成) l2 = np.array((1,23,435,65,43)) print(type(l2)) print(l2) # 打印结果 # <class 'numpy.ndarray'&g

numpy创建数组元素的获取

import numpy as np arr = np.array(np.arange(12).reshape(3,4)) print(arr) print(arr[0]) #获取二维数组的第一行 print(arr[1]) #获取二维数组的第二行 print(arr[:3]) #获取二维数组的前三行 print(arr[[0,2]]) #获取二维数组的第1行和第三行 print(arr[:,1]) #获取二维数组的第二列 print(arr[:,-2:]) #获取二维数组的后两列 print(

numpy中数组的简单运算以及使用

import numpy as np # 定义一个数组 test_array = np.array([[1 ,2 ,3] ,[3 ,4 ,5]]) ###数组简单的加减乘除法 # 加法 print(test_arra y +1) # 返回[[2 3 4][4 5 6]] # 减法 print(test_arra y -11) # 返回[[-10 -9 -8][ -8 -7 -6]] # 乘法 print(test_arra y *3) # 返回[[ 3 6 9][ 9 12 15]] # 除法

Numpy:数组创建、数组基本属性

Numpy数组创建 import numpy as np ''' numpy中的ndarray数组 ''' ary = np.array([1, 2, 3, 4, 5]) print(ary) ary = ary * 10 print(ary) ''' ndarray对象的创建 ''' # 创建二维数组 # np.array([[],[],...]) a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) print(a) # np.arange(起始值, 结束值,