如果只是从事简单的数据分析,其实numpy的用处并不是很大。简单了解一下numpy,学好pandas已经够用,尤其是对于结构化或表格化数据。但是精通面向数组的编程和思维方式是成为python科学计算牛人的关键一步。

而且使用numpy的代码往往比普通数组要快,因为数组运算一般都比纯python循环要快得多。大量使用列表,将无可避免的使用循环。

当大家对numpy足够熟悉的时候,我建议大家这样做:

将python循环和条件逻辑转换为数组运算和布尔数组运算。

尽量使用广播。

避免复制数据,尽量使用数组视图,即切片。

利用ufunc及其它各种方法。

线性代数

import numpy as np

x = np.array([[1, 2, 3], [4, 5, 6]])

y = np.array([[6, 23], [-1, 7], [8, 9]])

print(x)

print(y)

print(x.dot(y))

image.png

这是最基础的矩阵计算。比较常用的矩阵计算函数如下。

函数

说明

diag

以一位数组形式返回对角线元素

dot

矩阵乘法

trace

矩阵迹

det

行列式值

eig

本征值与本征向量

inv

求逆

pinv

Moore-Penrose伪逆

qr

QR分解

svd

奇异值分解

solve

解线性方程组Ax=b

lstsq

计算Ax=b的最小二乘解

高级数据操作

ndarray数组视图不复制任何数据的原因是因为,ndarray不只是一块内存和一个dtype,更准确的说它还有跨度信息,这使得数组能以各种步幅在内存中移动。(其实移动的是指针)也因此,ndarray数组有很多我们意想不到的功能。

import numpy as np

arr = np.arange(8)

print(arr)

new_arr = arr.reshape((4, 2))

print(arr)

print(new_arr)

image.png

同样,既然可以重塑,那也可以扁平化,即展开。

import numpy as np

arr = np.arange(8)

new_arr = arr.reshape((4, 2))

print(new_arr)

new_new_arr = new_arr.ravel()

print(new_new_arr)

image.png

在这里要提及一点。与其他科学计算环境相反(R或matlab),numpy允许更为灵活地控制数据在内存中的布局。具体来说,比如展开数组时是按列优先还是按行优先。

pandas的操作对象主要是结构化数据,numpy的操作对象主要是ndarray数组。这两者之间有很多功能函数是一一对应的,比如,pandas有对表格的拼接,ndarray也有对数组的拼接。

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

arr2 = np.array([[7, 8, 9], [10 ,11, 12]])

print(np.concatenate([arr1, arr2], axis=0))

print(np.concatenate([arr1, arr2], axis=1))

image.png

有拼接就有拆分,split函数用于将一个数组沿指定轴拆分为多个数组。

import numpy as np

from numpy.random import randn

arr = randn(8, 2)

first, second, third = np.split(arr, [2, 3])

print(first)

print(second)

print(third)

image.png

还有很多功能不一一介绍,其实非常简单,在这里只是引起大家注意,知道numpy功能的强大。

还需要注意一点的是,这些函数都是建立在ndarray数组之上的,列表,元组等并无此功能。

广播机制

所谓广播是说不同形状的数组之间的算术运算的执行方式。

将标量值和数组进行组合时就会发生最简单的广播。

import numpy as np

arr = np.arange(5)

print(arr)

print(arr-1)

image.png

如图所示,当数组和数字之间运算时,并没有报错,而是每个数组元素和该数字做了运算。这在很多科研数据处理的时候,会方便很多。

ufunc高级应用

ufunc除了一些通用的施行特定矢量化运算的特殊方法外,还可以自定义函数对数组进行运算。

import numpy as np

def add_elements(x, y):

return x + y

add_them = np.frompyfunc(add_elements, 2, 1)

print(add_them(np.arange(8), np.arange(8)))

image.png

当然,不幸的是,这种创造ufunc的手段虽然很灵活,却非常慢。因为它们在计算的时候都要执行一次python函数调用,这自然会比numpy自带的基于C编写的ufunc慢很多。

为此,python科学计算社区正在开发一些项目,力求使自定义ufunc的性能接近内置的那些。

python蛇术_小蛇学python(16)numpy高阶用法相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. python支持向量机 股票_小蛇学python(4)利用SVM预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

  3. 适合小学生python的书_小学生开始学Python,最接近AI的编程语言:安利一波Python书单...

    原标题:小学生开始学Python,最接近AI的编程语言:安利一波Python书单 AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于 ...

  4. 有c语言基础学python容易吗_零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  5. python编程基础_月隐学python第一课

    1.概述 本文是用于描述本人学习python的过程,这是第1课情况. 2.学习目标 了解python基础知识 理解程序和程序翻译的两种形式 掌握使用pycham编程基本步骤 重点掌握变量定义 掌握数据 ...

  6. python 智能造句_[零基础学Python]正规地说一句话

    小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说"饺子",对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用"饺饺"来代替,其实就是让孩子 ...

  7. python换脸完整程序_小 200 行 Python 代码做了一个换脸程序

    原标题:小 200 行 Python 代码做了一个换脸程序 简介 在这篇文章中我将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的脸替换为另一幅图片的脸. 这个过程分四步: ...

  8. python做外贸_跟着销售学python(3)---开发微信公平台(1)

    跟着销售学python(3)--- 开发微信公共平台(1) 首先交代一下, 目前我的学习背景啊: 我自己是一个创业的外贸服务公司, 自己主要做销售,学python主要目的是为了工作上的帮助吧. 自己的 ...

  9. 趣学python编程答案_《趣学Python编程》习题总结

    上周买了本书叫<趣学Python编程>(英文名:Python for kids),昨天看完后把书后面的题都做了下.由于第1.2章没有习题,第13章及之后都是描写实例的章节,因此这个总结性的 ...

最新文章

  1. JavaScript如何声明对象、函数以及对象中的函数(即方法)
  2. python平均工资-2019年我国程序员薪资统计,看看你出于什么水平?
  3. 【Android 界面效果49】RecyclerView高度随Item自适应
  4. CSS概念,引入,选择器
  5. php require 找不到,php使用require()时的注意点
  6. 一台电脑同时运行多个tomcat配置方法
  7. 工作总结18:Vuex处理思路
  8. 2021年ICT趋势白皮书:不确定性中的确定
  9. scikit-learn中随机森林使用详解
  10. 三枚Flash 0day漏洞曝光,Flash再次紧急更新
  11. oracle sql列转行_Oracle行转列、列转行的Sql语句总结(转)
  12. 机器学习与数据挖掘复习笔记
  13. ZOOM视频会议总是很卡连接不上
  14. 特征提取——Hand-crafted feature
  15. Android 9.0 蓝牙通讯录 BluetoothPbapClient
  16. macos可以升级到指定版本吗_MacOS升级10.13后变垃圾,教你如何降级自救
  17. 屏蔽百度搜索结果中的广告
  18. 【文件上传漏洞-02】利用PUT方法上传文件—以Apache为例
  19. m7450扫描无法连接至计算机,关于联想M7450F打印机如何共享扫描功能的解决方案 By Deathbringer...
  20. html5 本地文件系统,本地文件系统 客户端存储 WebAPI编程 [HTML5知典]

热门文章

  1. 用计算机名怎么共享电视盒,机顶盒怎么通过电脑实现局域网共享
  2. 桌面环境选择_Fedora 30 正式版发布:引入 Deepin 桌面环境(DDE)
  3. python画画用哪库好_学Python画画:应用Turtle库画一个蠢萌的小黄人
  4. C语言之预处理探究(一):宏
  5. USB On-The-Go引脚
  6. java 内存溢出分析_用一段时间后java内存溢出问题分析(转)
  7. layui.open 关闭之后触发_JAVA虚拟机关闭钩子(Shutdown Hook)
  8. leetcode刷题:零钱兑换
  9. java开发工具eli_Java 学习线路图是怎样的?
  10. linux crontab 每5分钟执行一次_linux面试题:Linux定时任务必备技能有哪些?