Numpy教程(4)

Numpy基本操作

  • 数组与标量、数组之间的运算
  • 数组的矩阵积(matrix product)
  • 数组的索引和切片
  • 数组的转置与轴对换
  • 通用函数:快速的元素级数组成函数
  • 聚合函数
  • np.where函数
  • np.unique函数

ndarray-数组与标量、数组之间的运算

  • 数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式替代循环的做法。
  • 矢量化数组运算性能比纯python方式快上一两个数据级。
  • 大小相等的两个数组之间的任何算术运算都会将其运算应用到元素级上的操作。
  • 元素级操作: 在Numpy中,大小相等的数组之间的运算,为元素级运算,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同。
    image.png

    数组与标量之间的运算:
image.png

数组与数组之间的运算:

形状与形状必须一致。


image.png

ndarray-数组的矩阵积

矩阵:多维数组即矩阵。

矩阵积(matrix product):两个二维矩阵(行和列的矩阵)满足第一个矩阵的列数与第二个矩阵的行数相同,那么可以进行矩阵的乘法,即矩阵积,矩阵积不是元素级的运算。也称为点积、数量积。


image.png

image.png

ndarray-多维数组的索引

image.png
  • 可以结合数组的形状,帮助理解多维数组的索引。(索引都是从0开始)


    image.png
  • 在各维度上单独切片,如果某维度都保留,则直接使用:冒号,不指定起始值和终止值


    image.png
  • 注意

Numpy中通过切片得到的新数组,只是原来数组的一个视图,因此对新数组的操作也会影响原来的数组


image.png
  • 利用布尔类型的数组进行数据索引,最终返回的结果是对应索引数组中数据为True位置的值。
A =np.random.random((4,4))
print(A.shape)
A
image.png
B = A<0.5         #B数组为A种每个元素是否小于0.5 的布尔值
print(B.shape)
B                 # 打印B数组
image.png
C = A[B]             # 将B数组中True的值取出来形成一个新的数组,这个前提条件是A的shape和B的shape是要一致的。
print(C.shape)
C                    # A数组元素在B中对应为True的元素组成的新的数组

![image.png](http://upload-images.jianshu.io/upload_images/6353508-06ed9dd6b73ce47b.png?imageM[图片上传中...(image.png-ed63f-1511880880297-0)]
ogr2/auto-orient/strip%7CimageView2/2/w/1240)

下图是一个通过数组的方式获取学生成绩的例子


image.png

reshape 函数的作用在于重新定义数组的形状
reshape(-1,)的作用将取得的数组转为一维数组


image.png

image.png

对于一维数组来说,加不加reshape(-1,)没有太大的区别


image.png

注意图中运用了C = A[B] 的方法获取内容,改方法的前提条件上述已经提到:A的shape和B的shape是要一致的。


image.png

ndarray-花式索引

  • 花式索引(Fancy indexing)指的是利用整数数组进行索引的方式。


    image.png

如果仅需要取列的数据,应当参考下图第二个写法。


image.png

求第1,2,5行的0,3,2列的数据做法如下:


image.png

ndarray-数组的转置与轴对换

  • 数组转置是指将shape进行重置操作,并将其值作为原始shape元组的倒置,比如原始的shape值为(2,3,4), 那么转置后的新元组的shape值为(4,3,2)f
  • 对于二维数组而言(矩阵)数组的转置其实就是矩阵的转置。
  • 可以通过调用数组的transpose函数或者T属性进行数组转置操作。


    image.png

ndarray-通用函数/常用函数

  • ufunc: numpy模块中对ndarray中数据进行快速元素级运算的函数,也可以看做是简单的函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。
  • 主要包括一元函数和二元函数。

一元函数


image.png

image.png

isnan 函数
如何声明包含nan的数组呢?
使用np.NaN

arr3=np.array([1,np.NaN,2,3])
arr3
image.png

np.isnan函数的使用

image.png

image.png

各个函数使用示例

image.png

ndarray-通用函数、常用函数(二元函数)


image.png
arr1 = np.array([1,2,8,1])
arr2 = np.array([4,2,6,0])

print("np.mod(arr2,arr1)=",np.mod(arr2,arr1))
print("np.dot(arr1,arr2)=",np.dot(arr1,arr2))
print("arr1 > arr2",np.greater(arr1,arr2))
print("arr1 >= arr2",np.greater_equal(arr1,arr2))
print("arr1 < arr2", np.less(arr1,arr2))
print("arr1 == arr2", np.equal(arr1,arr2))
print("arr1 != arr2", np.not_equal(arr1,arr2))
print("np.logical_and(arr1,arr2)=",np.logical_and(arr1,arr2))
print("np.logical_or(arr1,arr2)=",np.logical_or(arr1,arr2))
print("np.logical_xor(arr1,arr2)=",np.logical_xor(arr1,arr2))
image.png

ndarray-聚合函数

  • 聚合函数是对一组值(eg 一个数组)进行操作,返回一个单一值作为结果的函数。当然聚合函数也可以指定对某个具体的轴进行数据聚合操作;常将的聚合操作有:平均值,最大值,最小值,方差等等
arr = np.array([[1,2,3,4],[7,8,9,10]])
print("arr=",arr)
print("min=",arr.min())
print("max=",arr.max())
print("mean=",arr.mean())
print("std=",arr.std())
print("根据方差公式计算的方差值为:", np.sqrt(np.power(arr-arr.mean(),2).sum()/arr.size))
image.png
image.png

np.where函数

  • np.where 函数是三元表达式 x if condition else y的矢量化版本
help(np.where)

Help on built-in function where in module numpy.core.multiarray:

where(...)
    where(condition, [x, y])
    
    Return elements, either from `x` or `y`, depending on `condition`.
    
    If only `condition` is given, return ``condition.nonzero()``.
    
    Parameters
    ----------
    condition : array_like, bool
        When True, yield `x`, otherwise yield `y`.
    x, y : array_like, optional
        Values from which to choose. `x` and `y` need to have the same
        shape as `condition`.
    
    Returns
    -------
    out : ndarray or tuple of ndarrays
        If both `x` and `y` are specified, the output array contains
        elements of `x` where `condition` is True, and elements from
        `y` elsewhere.
    
        If only `condition` is given, return the tuple
        ``condition.nonzero()``, the indices where `condition` is True.
    
    See Also
    --------
    nonzero, choose
    
    Notes
    -----
    If `x` and `y` are given and input arrays are 1-D, `where` is
    equivalent to::
    
        [xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
    
    Examples
    --------
    >>> np.where([[True, False], [True, True]],
    ...          [[1, 2], [3, 4]],
    ...          [[9, 8], [7, 6]])
    array([[1, 8],
           [3, 4]])
    
    >>> np.where([[0, 1], [1, 0]])
    (array([0, 1]), array([1, 0]))
    
    >>> x = np.arange(9.).reshape(3, 3)
    >>> np.where( x > 5 )
    (array([2, 2, 2]), array([0, 1, 2]))
    >>> x[np.where( x > 3.0 )]               # Note: result is 1D.
    array([ 4.,  5.,  6.,  7.,  8.])
    >>> np.where(x < 5, x, -1)               # Note: broadcasting.
    array([[ 0.,  1.,  2.],
           [ 3.,  4., -1.],
           [-1., -1., -1.]])
    
    Find the indices of elements of `x` that are in `goodvalues`.
    
    >>> goodvalues = [3, 4, 7]
    >>> ix = np.in1d(x.ravel(), goodvalues).reshape(x.shape)
    >>> ix
    array([[False, False, False],
           [ True,  True, False],
           [False,  True, False]], dtype=bool)
    >>> np.where(ix)
    (array([1, 1, 2]), array([0, 1, 1]))
image.png
image.png

np.unique函数

  • np.unique 函数的主要作用是将数组中的元素进行去重操作(也就是只保存不重复的数据)


    image.png
arr2 = np.random.randint(5,13,(4,4))
print(arr2)
print()
arr3 = np.unique(arr2)
print(arr3)
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容