numpy教程

防止输出省略号

import numpy as np
np.set_printoptions(threshold=np.inf)

广播机制

numpy计算函数返回默认是一维行向量:

import numpy as np

a = [[1,1,1],
[2,2,2],
[3,3,3]]
b = (np.sum(a,axis=1))
c = (np.sum(a,axis=0))
print(b,'\n',c) # [3 6 9]
# [6 6 6]

所以广播之实际是高维对一维行向量的广播:

除法广播:

b = a/(np.sum(a,axis=1))
c = a/(np.sum(a,axis=0))
print(b,'\n',c) # [[ 0.33333333 0.16666667 0.11111111]
# [ 0.66666667 0.33333333 0.22222222]
# [ 1. 0.5 0.33333333]]
# [[ 0.16666667 0.16666667 0.16666667]
# [ 0.33333333 0.33333333 0.33333333]
# [ 0.5 0.5 0.5 ]]

向量乘法,加法可以类比:

np.array([1,2,3])*np.array([1,1,1])
# [1 2 3] np.array([1,2,3])*np.array([1])
# [1 2 3] np.array([1,2,3])*np.array([1,1])
# 报错 np.array([[1],[1],[1]])*np.array([1,2,3])
# [[1 2 3]
# [1 2 3]
# [1 2 3]]

线性代数相关

np.diag():对角阵生成

np.linalg.det():求行列式

np.linalg.inv():矩阵求逆

np.linalg.eig():对称阵特征值分解

np.linalg.svd():任意阵SVD分解

通用函数

使单输入单输出的函数具备广播功能,frompyfunc(fun, in_num, out_num),常用f = frompyfunc(fun, 1, 1)

>>> oct_array = np.frompyfunc(oct, 1, 1)

>>> oct_array(np.array((10, 30, 100)))
array([012, 036, 0144], dtype=object) >>> np.array((oct(10), oct(30), oct(100))) # for comparison
array(['012', '036', '0144'],
dtype='|S4')

np.sum(array1 == array2,dtype=float)

bool转换为数组默认是整形,需要手动修改为浮点型,比较值得注意的tip,或者说由于python本身不做区分,所以在numpy中必须特别注意数字类型的问题

取整

np.rint(result) # 四舍五入
np.ceil(result) # 向上取整
np.floor(result) # 向下取整

np.unique()

保留数组中不同的值

>>> a=np.random.randint(0,5,8)
>>> a
array([2, 3, 3, 0, 1, 4, 2, 4]) >>> np.unique(a)
array([0, 1, 2, 3, 4]) >>> c,s=np.unique(b,return_index=True)
>>> c
array([0, 1, 2, 3, 4])
>>> s
array([3, 4, 0, 1, 5])(元素出现的起始位置)

np.full((shape), value, type)

numpy数组初始化函数

np.split(array, num)

把数组顺序等分

np.fun.at(array, index_array, [array2])

fun需要一个参数时等价np.fun(array[index_array]),多参数用法如下:

Examples

Increment items 0 and 1, and increment item 2 twice:

>>> a = np.array([1, 2, 3, 4])
>>> np.add.at(a, [0, 1, 2, 2], 1)
>>> print(a)
array([2, 3, 5, 4])

Add items 0 and 1 in first array to second array, and store results in first array:

>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([1, 2])
>>> np.add.at(a, [0, 1], b)
>>> print(a)
array([2, 4, 3, 4])

特色,

#np.add.at(dW, x, dout)
#dW[x] += dout # this will not work, see the doc of np.add.at
a = np.array([1,2,3,4,5,6,7])
i = np.array([0,1,2,0,1])
b = np.array([1,2,3,4,5])
np.add.at(a, i, b)
print(a)
a = np.array([1,2,3,4,5,6,7])
i = np.array([0,1,2,0,1])
b = np.array([1,2,3,4,5])
a[i] += b
print(a)

输出如下,即索引重复的时候,只有np.add.at会累积前面的结果,单纯的索引会取最后一次的结果覆盖,

[6 9 6 4 5 6 7]

[5 7 6 4 5 6 7]

np.save() & np.load()

np.save('./bottleneck/{1}/{0}'.format(img.split('/')[-1].split('.')[0], file_name),bottleneck_values)
bottleneck_string = np.load(os.path.join(base_path,
'bottleneck',
train_or_test,
label_name,
bottlenecks_tensor_name))

np.loadtxt()

# 本函数读取数据后自动转化为ndarray数组,可以自行设定分隔符delimiter=","
np.loadtxt('housing.data') # 读取数据

np.insert()

np.insert(scale_data, 0, 1, axis=1)      # 数组插入函数

  在数组中插入指定的行列,numpy.insert(arr, obj, values, axis=None),和其他数组一样,axis不设定的话会把数组定为一维后插入,axis=0的话行扩展,axis=1的话列扩展

np.matrix()

『科学计算_理论』优化算法:梯度下降法&牛顿法

学习了numpy中的矩阵类型:np.matrix(),在牛顿法中我用的是matrix,在梯度下降法中我用的是array:

matrix是array的子类,特点是有且必须只是2维,matrix.I()可以求逆,和线代的求逆方法一致,所以绘图时我不得不才用np.sequeeze(np.asarray())操作来降维,而由于x[:, -1]这种操作对array会自动降维(由两行变为一行),所以要么使用matrix,要么切片后reshape(2,1),总之不消停。

np.concatenate()

『科学计算_理论』优化算法:梯度下降法&牛顿法

注意到数组拼接方法都是不破坏原数组,单纯返回新数组的,且axis=0是行拼接(行数增加),axis=1是列拼接(列数增加),

x_n = np.concatenate((x_n, x_n[:,-1] - np.linalg.inv(H).dot(dx_n)),axis=1)

np.nxis

np.exped_dim

用于扩展维度,numpy不仅有expend_dim这样的函数,也可以使用np.newaxis标记来实现扩维:

a = np.array([1,2,3,4,5])
a = a[:,np.newaxis]
a
Out[44]:
array([[1],
[2],
[3],
[4],
[5]])
a = np.array([1,2,3,4,5])
a = a[np.newaxis,:]
a
Out[47]:
array([[1, 2, 3, 4, 5]])

array.transpose(1,0,2)

转置,1维没效果(并不能行列互化),高维后面参数维转置顺序,假如(T,N,H)经过上面的命令会变为(N,T,H)

np.bincount()

计数&投票函数

numpy.bincount详解

np.maximum(X, Y, out=None):

    • X 与 Y 逐位比较取其大者;
    • 最少接收两个参数

np.squeeze():剔除长度为一的轴

np.squeeze(np.array([[1,2,3]]))
# Out[17]:
# array([1, 2, 3])
np.squeeze(np.array([[1],[2],[3]]))
# Out[18]:
# array([1, 2, 3])

numpy.roll():平移数组行列

>>> x = np.arange(10) 
>>> np.roll(x, 2)
array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
>>> x2 = np.reshape(x, (2,5))
>>> x2
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> np.roll(x2, 1)
array([[9, 0, 1, 2, 3],
[4, 5, 6, 7, 8]])
>>> np.roll(x2, 1, axis=0)
array([[5, 6, 7, 8, 9],
[0, 1, 2, 3, 4]])
>>> np.roll(x2, 1, axis=1)
array([[4, 0, 1, 2, 3],
[9, 5, 6, 7, 8]])

计算机视觉中人为建立图像抖动会使用这个函数:

『cs231n』作业3问题4选讲_图像梯度应用强化

ox, oy = np.random.randint(-max_jitter, max_jitter+1, 2)                    # 随机抖动生成
X = np.roll(np.roll(X, ox, -1), oy, -2) # 抖动,注意抖动不是随机噪声 pass X = np.roll(np.roll(X, -ox, -1), -oy, -2) # 还原抖动

『Numpy』常用方法记录的更多相关文章

  1. 『Json』常用方法记录

    json模块可以把字典结构改写为string然后保存,并可以反向读取字典 pickle模块则可以持久化任意数据结构 但是即使同样是字典数据结构,两个包也是有差别的, json字典value不支持其他对 ...

  2. 『Os』常用方法记录

    os.rename(name_old, name_new) 『Scrapy』爬取斗鱼主播头像 重命名函数os.rename比win下的重命名强多了,它可以对路径重命名达到修改文件位置的功效. os.p ...

  3. 『Scipy』常用方法记录

    优化器使用教程 J = lambda wb: self.get_cost_grad(wb, X, Y_one_hot) theta = self.wb_init(X,Y_one_hot) result ...

  4. 『Glob』常用方法记录

    glob.glob(file) 返回匹配的文件 glob.glob(./flower_photos/tulips/*.jpg) Out[1]:<br># ['./flower_photos ...

  5. 『Numpy』内存分析_高级切片和内存数据解析

    在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...

  6. 『Nltk』常用方法

    引言 在nltk的介绍文章中,前面几篇主要介绍了nltk自带的数据(书籍和语料),感觉系统学习意义不大,用到哪里看到那里就行(笑),所以这里会从一些常用功能开始,适当略过对于数据本体的介绍. 文本处理 ...

  7. 『Numpy』内存分析_numpy.dtype解析内存数据

    numpy.dtype用于自定义数据类型,实际是指导python程序存取内存数据时的解析方式. [注意],更改格式不能使用 array.dtype=int32 这样的硬性更改,会不改变内存直接该边解析 ...

  8. 『Numpy』内存分析_利用共享内存创建数组

    引.内存探究常用函数 id(),查询对象标识,通常返回的是对象的地址 sys.getsizeof(),返回的是 这个对象所占用的空间大小,对于数组来说,除了数组中每个值占用空间外,数组对象还会存储数组 ...

  9. 『Numpy』np.ravel()和np.flatten()

    What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...

随机推荐

  1. RocketMQ事务消费和顺序消费详解

    一.RocketMq有3中消息类型 1.普通消费 2. 顺序消费 3.事务消费 顺序消费场景 在网购的时候,我们需要下单,那么下单需要假如有三个顺序,第一.创建订单 ,第二:订单付款,第三:订单完成. ...

  2. 学习Linux的正确姿势

    学习Linux的正确姿势 端正学习态度1.Linux不等于骇客(or Cracker).当然众所周知很多“黑客工具”都是Linux平台上的,我帮助过很多Linux小白发现他们殊途同归都是朝着类似Air ...

  3. Linux中Postfix邮件安装配置(二)

    本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍.在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统. 卸载自带postfix ...

  4. 【译】理解node.js事件轮询

    Node.js的第一个基本论点是I/O开销很大. 当前编程技术中等待I/O完成会浪费大量的时间.有几种方法可以处理这种性能上的影响: 同步:每次处理一个请求,依次处理.优点:简单:缺点:任何一个请求都 ...

  5. 2D 2 3D 开源项目

    http://www.cvlibs.net/projects.php http://www.cvlibs.net/software/libelas/

  6. 20165310 Java实验四 《Android程序设计》

    20165310 实验四 <Android程序设计> 第24章:初识Android 任务一:改写res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号 首 ...

  7. uboot启动提示Error, wrong i2c adapter 0 max 0 possible后卡住了怎么办

    答:这个与i2c驱动有关,应该使能i2c驱动相关的配置项

  8. Python 逗号的几种作用

    转自http://blog.csdn.net/liuzx32/article/details/7831247 最近研究Python  遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传 ...

  9. 【java工具类】java做的一个xml转Excel工具,基于maven工程

    说明:适合数据库导出为xml时转成Excel 本工具将上传至GitHub:https://github.com/xiaostudy/xiaostudyAPI3 doc4j的maven依赖 <!- ...

  10. org.apache.jasper.JasperException: /WEB-INF/view/../../../common/common1.jsp (line: 7, column: 1) Page directive must not have multiple occurrences of pageencoding

    本文为博主原创,未经允许,不得转载: 先还原错误: org.apache.jasper.JasperException: /WEB-INF/view/../../../../common/common ...