您的位置:首页 > 编程语言 > Python开发

numpy's sovling specific problem(numpy之解决特定问题)

2015-07-14 23:08 756 查看
numpy's sovling specific problem(numpy之解决特定问题)



numpy's sovling specific problem(numpy之解决特定问题)

Table of Contents

1 前言

2 特定问题

2.1 numpy.lib.stride_tricks.as_strided

2.2 numpy.meshgrid()

1 前言

这几天开始熟悉numpy的模块,推荐Numpy Cookbook。有例子,蛮好上手。不得不提一下之前搭建的python开发

环境,确实带来了很大的方便。对每一章,只需要快速建立一个文件,把对应的example复制到文件中去,然后 把buffer直接发送到python运行环境,就能马上看到结果。对于不懂的语句,又能eval 当前语句。如果想做 实验,也可以直接在buffer中写,不用跳到python的交互式中去。而且还可以省去没一个例子之前的模块导入时 间。真是既方便又省时。以后有时间可以写文章谈谈这种快速学习环境。

学习numpy或scipy等数据分析模块,需要安装对应的开发包,这里推荐anaconda,跨平台的python分析工具包汇

总,不仅带了很多分析库,还自带ipython qtconsole和notebook。对于想快速了解python数据分析的来说真是太 方便了,要感谢为此做出努力的人。直接在scipy官网上可以找到,windows上直接下载安装就可以用,linux也一 样,只不过,我把里面anaconda中库的路径添加到PYTHONPATH中去。

下面便是我自己探索的过程中碰到的一些比较费解的问题,分享出来,供新手们参考。也给我自己当作一个笔记。 希望以后可以随着学习的深入,写成一个系列。

2 特定问题

2.1 numpy.lib.stride_tricks.as_strided

书中例子

sudoku = numpy.array([
[2, 8, 7, 1, 6, 5, 9, 4, 3],
[9, 5, 4, 7, 3, 2, 1, 6, 8],
[6, 1, 3, 8, 4, 9, 7, 5, 2],
[8, 7, 9, 6, 5, 1, 2, 3, 4],
[4, 2, 1, 3, 9, 8, 6, 7, 5],
[3, 6, 5, 4, 2, 7, 8, 9, 1],
[1, 9, 8, 5, 7, 3, 4, 2, 6],
[5, 4, 2, 9, 1, 6, 3, 8, 7],
[7, 3, 6, 2, 8, 4, 5, 1, 9]
])

strides=sudoku.itemsize * numpy.array([27,3,9,1])
shape = (3, 3, 3, 3)
squares = numpy.lib.stride_tricks.as_strided(sudoku, shape=shape, strides=strides)

初看到应该跟我有同样的疑惑,这个[27,3,9,1] 和 (3, 3, 3 ,3) 是怎么来的,经过试验,应该等价于以下语句

>>> [(27*i+3*j+9*k+z) for i in range(3) for j in range(3) for k in range(3) for z in range(3) ]

[0, 1, 2, 9, 10, 11, 18, 19, 20, 3, 4, 5, 12, 13, 14, 21, 22, 23, 6, 7, 8, 15, 16, 17,
24, 25, 26, 27, 28, 29, 36, 37, 38, 45, 46, 47, 30, 31, 32, 39, 40, 41, 48, 49, 50, 33,
34, 35, 42, 43, 44, 51, 52, 53, 54, 55, 56, 63, 64, 65, 72, 73, 74, 57, 58, 59, 66, 67,
68, 75, 76, 77, 60, 61, 62, 69, 70, 71, 78, 79, 80]

看输出,便可知这样建立了数组元素的索引。

2.2 numpy.meshgrid()

另一个例子

coordinates = numpy.meshgrid(xindices, yindices)

下面是我自己写的注释,也是建立索引的意思。

# meshgrid
# x = numpy.linspace(1,3,3)
# y = numpy.linspace(1,2,2)
# meshgrid(x,y)
# [array([[1., 2., 3.],
#        [1., 2., 3.]]),
# array([[1., 1., 1.],
#        [2., 2., 2.]])]
# and than can generate
# => [(1,1) (1,2) (1,3)
#     (2,1) (2,2) (2,3)]


Date: 2015-07-14T23:05+0800

Author: 行者知

Org version 7.9.3f with Emacs version 24

Validate XHTML 1.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: