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)]
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)]