建议10:numpy使用基础
# -*- coding: utf-8 -*-
import numpy as np
#----------------------------------------
#-- 定义 ndarray
#-- 先申明为python的序列,再转化为numpy的数组
#---------------------------------------- ada = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) #获得数组大小
print ada.shape #设置数组大小
ada.shape = 4,3 #当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度
ada.shape = 3,-1 #使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变
ada2 = ada.reshape((2,-1)) #数组ada和ada2其实共享数据存储内存区域,因此修改其中任意一个数组的元素都会同时修改另外一个数组的内容:
ada[2,1] = 100
print ada,ada2 #数组的元素类型可以通过dtype属性获得
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float) #----------------------------------------
#-- 定义 ndarray
#-- 采用NumPy提供了很多专门用来创建数组
#---------------------------------------- #arange函数类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值:
np.arange(0,1,0.1) #linspace函数通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值:
np.linspace(0, 1, 12) #logspace函数和linspace类似,不过它创建等比数列,下面的例子产生1(10^0)到100(10^2)、有20个元素的等比数列:
np.logspace(0, 2, 20) #使用frombuffer, fromstring, fromfile等函数可以从字节序列创建数组
s = "abcdefgh"
np.fromstring(s, dtype=np.int8)
np.fromstring(s, dtype=np.int16) #fromfunction函数的第一个参数为计算每个数组元素的函数,第二个参数为数组的大小(shape),因为它支持多维数组,所以第二个参数必须是一个序列
def func(i):
return i%4+1
np.fromfunction(func, (10,)) #创建一个二维数组表示九九乘法表
def func2(i, j):
return (i+1) * (j+1)
a = np.fromfunction(func2, (9,9)) #----------------------------------------
#-- 使用下标范围
#-- 通过下标范围获取的新的数组是原始数组的一个视图。它与原始数组共享同一块数据空间:
#---------------------------------------- b = a[3:7] # 通过下标范围产生一个新的数组b,b和a共享同一块数据空间
b[2] = -10 # 将b的第2个元素修改为-10
a # a的第5个元素也被修改为10 #----------------------------------------
#-- 使用整数序列
#-- 当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表或者数组。
#-- 使用整数序列作为下标获得的数组不和原始数组共享数据空间。
#----------------------------------------
x = np.arange(10,1,-1)
x[[3, 3, 1, 8]] # 获取x中的下标为3, 3, 1, 8的4个元素,组成一个新的数组
b = x[np.array([3,3,-3,8])] #下标可以是负数
x[[3,5,1]] = -1, -2, -3 # 整数序列下标也可以用来修改元素的值 #----------------------------------------
#-- 使用布尔数组
#-- 当使用布尔数组b作为下标存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。
#-- 使用布尔数组作为下标获得的数组不和原始数组共享数据空间,注意这种方式只对应于布尔数组,不能使用布尔列表。
#----------------------------------------
x = np.arange(5,0,-1) # 布尔数组中下标为0,2的元素为True,因此获取x中下标为0,2的元素
x[np.array([True, False, True, False, False])] # 如果是布尔列表,则把True当作1, False当作0,按照整数序列方式获取x中的元素
x[[True, False, True, False, False]] # 布尔数组的长度不够时,不够的部分都当作False
x[np.array([True, False, True, True])] # 布尔数组下标也可以用来修改元素
x[np.array([True, False, True, True])] = -1, -2, -3 # 产生一个长度为10,元素值为0-1的随机数的数组
x = np.random.rand(10) # 数组x中的每个元素和0.5进行大小比较,得到一个布尔数组,True表示x中对应的值大于0.5
x>0.5 # 使用x>0.5返回的布尔数组收集x中的元素,因此得到的结果是x中所有大于0.5的元素的数组
x[x>0.5] #----------------------------------------
#-- 多维数组
#-- 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,
#-- NumPy采用组元(tuple)作为数组的下标
#----------------------------------------
#多维数组同样也可以使用整数序列和布尔数组进行存取。 #----------------------------------------
#-- ufunc
#-- ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。
#---------------------------------------- #linspace产生一个从0到2*PI的等距离的10个数
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x) #np.sin是一个ufunc函数,因此它对x中的每个元素求正弦值,然后将结果返回,并且赋值给y #如果我们希望将sin函数所计算的结果直接覆盖到数组x上去的话,可以将要被覆盖的数组作为第二个参数传递给ufunc函数.
t = np.sin(x,x) #add函数就是一个最常用的
a = np.arange(0,4)
b = np.arange(1,5)
np.add(a,b) #add函数返回一个新的数组,此数组的每个元素都为两个参数数组的对应元素之和。
#它接受第3个参数指定计算结果所要写入的数组,如果指定的话,add函数就不再产生新的数组。
np.add(a,b,a) #----------------------------------------
#-- ufunc
# y = x1 + x2: add(x1, x2 [, y])
# y = x1 - x2: subtract(x1, x2 [, y])
# y = x1 * x2: multiply (x1, x2 [, y])
# y = x1 / x2: divide(x1, x2 [, y]), 如果两个数组的元素为整数,那么用整数除法
# y = x1 / x2: true divide (x1, x2 [, y]), 总是返回精确的商
# y = x1 // x2: floor divide (x1, x2 [, y]), 总是对返回值取整
# y = -x: negative(x [,y])
# y = x1**x2: power(x1, x2 [, y])
# y = x1 % x2: remainder(x1, x2 [, y]), mod(x1, x2, [, y])
#注意
#要运算的数组很大的话,会因为产生大量的中间结果而降低程序的运算效率。例如:假设a b c三个数组采用算式x=a*b+c计算
#t = a * b
#x = t + c
#del t
#分解的好处以减少一次内存分配。
#----------------------------------------
建议10:numpy使用基础的更多相关文章
- numpy的基础运算2-【老鱼学numpy】
numpy的基础运算中还有很多运算,我们这里再记录一些. 最小/大值索引 前面一篇博文中我们讲述过如何获得数组中的最小值,这里我们获得最小/大值的索引值,也就是这个最小/大值在整个数组中位于第几位. ...
- 1.2 NumPy数组基础
目录 第一章 numpy入门 1.2 numpy数组基础 1.2.1 数组的属性 1.2.2 数组的索引:获取单个元素 1.2.3 数组切片:获取子数组 1.2.4 数组的变形 1.2.5 数组的拼接 ...
- 读改善c#代码157个建议:建议10~12
目录: 建议10:创建对象时需要考虑是否实现比较器 建议11:区别对待==与Equals 建议12:重写Equals时也要重写GetHashCode 一.建议10:创建对象时需要考虑是否实现比较器 比 ...
- 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性
[源码下载] 背水一战 Windows 10 (78) - 自定义控件: 基础知识, 依赖属性, 附加属性 作者:webabcd 介绍背水一战 Windows 10 之 控件(自定义控件) 自定义控件 ...
- Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)
Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...
- (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析【待写】
(3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析[待写]
- 初学Direct X(10)—— D3D基础预备知识
初学Direct X(10) -- D3D基础预备知识 1. 像素格式 D3DFMT_X8R8G8B8(F) X:未加使用 8:8位用于显示 B:用于显示蓝色 F:浮点像素类型 以下三个较为常用,使用 ...
- 编写高质量代码改善C#程序的157个建议——建议10: 创建对象时需要考虑是否实现比较器
建议10: 创建对象时需要考虑是否实现比较器 有对象的地方就会存在比较,在.NET的世界中也一样.举个最简单的例子,在UI中,有一个10个人的Salary列表.根据排序的需要,列表要支持针对基本工资来 ...
- (转)python资料汇总(建议收藏)零基础必看
摘要:没料到在悟空问答的回答大受欢迎,为方便朋友,重新整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何 ...
- 【笔记】numpy.array基础(1)
numpy.array基础 使用numpy.__version__可以检查numpy的版本 当然也可以直接使用命令行检查numpy版本 也可以用来简化引用,使用as python list特点 num ...
随机推荐
- 2017-5-14 湘潭市赛 Longest Common Subsequence 想法题
Longest Common Subsequence Accepted : Submit : Time Limit : MS Memory Limit : KB Longest Common Subs ...
- Cocos2dx 场景切换动画
1.http://www.cnblogs.com/linux-ios/archive/2013/04/09/3009292.html
- JNDI架构提供了一组标准的独立于命名系统的API
JNDI架构提供了一组标准的独立于命名系统的API,这些API构建在与命名系统有关的驱动之上.这一层有助于将应用与实际数据源分离,因此不管应用访问的是LDAP.RMI.DNS.还是其他的目录服务.换句 ...
- Servlet 处理日期
使用 Servlet 的最重要的优势之一是,可以使用核心 Java 中的大多数可用的方法.本章将讲解 Java 提供的 java.util 包中的 Date 类,这个类封装了当前的日期和时间. Dat ...
- caffe使用自己的数据做分类
这里只举一个例子: Alexnet网络训练自己数据的过程 用AlexNet跑自己的数据 参考1:http://blog.csdn.net/gybheroin/article/details/54095 ...
- css 变手
用css 添加手状样式,鼠标移上去变小手,变小手 用css 添加手状样式,鼠标移上去变小手,变小手 cursor:pointer; 用JS使鼠标变小手onmouseover(鼠标越过的时候) onmo ...
- 初探webpack之环境配置
先感叹一句,前端的发展真是太快了,ng和bb还没怎么学好就要过时了.现在感觉react当是未来的一个大方向. 以前一直用的grunt,不过前段时间作者已经停止更新了.正好webpack风头正盛,咱也不 ...
- FFF at Valentine(强连通分量缩点+拓扑排序)
FFF at Valentine Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Java基础知识大全
本文引用于: http://uule.iteye.com/blog/762949 /; DecimalFormat df = new DecimalFormat("0.00");/ ...
- MySql 安装常见问题汇总
说明: 以下是针对 Mac 10.11 系统 以前,安装 MySql 数据库后, 设置的密码过于复杂,想更改为简单的密码, 方便数据库的使用. 1. 关闭和启动 MySql 数据库的方法: Syste ...