1. os.abspath(__file__)表示当前所在py文件的绝对路径,注意这个函数不能单独在命令行运行必须要在py文件里面。os.path.dirname()表示其所在的文件夹
2. Numpy
2.1 numpy.ndarray()
标题中的函数就是numpy的构造函数,我们可以使用这个函数创建一个ndarray对象。构造函数有如下几个可选参数:
| 参数 | 类型 | 作用 |
|---|---|---|
| shape | int型tuple | 多维数组的形状 |
| dtype | data-type | 数组中元素的类型 |
| buffer | 用于初始化数组的buffer | |
| offset | int | buffer中用于初始化数组的首个数据的偏移 |
| strides | int型tuple | 每个轴的下标增加1时,数据指针在内存中增加的字节数 |
| order | ‘C’ 或者 ‘F’ | ‘C’:行优先;’F’:列优先 |
参考numpy中 C order与F order的区别是什么?
1.
order参数的C和F是numpy中数组元素存储区域的两种排列格式,即C语言格式和Fortran语言格式。
创建一个3×3的2维数组
1
2
3 > import numpy as np
> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32)
>
数组a在内存中的数据存储区域中存储方式(默认order=”C”,其中一个格子是4bytes):
1
2 > |1|2|3|4|5|6|7|8|9|
>
在C语言中当第一维数组也就是第0轴的下标增加1时,元素在内存中的地址增加3个元素的字节数,在此例中也就是12bytes,从1的地址增加12bytes到4的地址。此时
1
2 > a.strides = (12, 4)
>
若以F order创建数组:
1
2 > b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float32, order="F")
>
数组b在内存中的数据存储区域中的存储方式:
1
2 > |1|4|7|2|5|8|3|6|9|
>
在Fortran语言中,第一维也就是第0轴下标增加1时,元素的地址增加一个元素字节数,在此例子中也就是4 bytes,从1的地址增加4bytes到4的地址。
1
2 > b.strides = (4, 12)
>
2.2
多维数组在内存中的存储顺序问题。
以一个二维数组a[2][2]为例,在C语言中,其在内存中存储为
1
2 > a[0][0] a[0][1] a[1][0] a[1][1]
>
而在Fortran语言中,其顺序为
1
2 > a[0][0] a[1][0] a[0][1] a[1][1]
>
实例:
1 | np.ndarray(shape=(2,3), dtype=int, buffer=np.array([1,2,3,4,5,6,7]), offset=0, order="C") |
参考数据格式汇总及type, astype, dtype区别
2.3 dot()函数
1 | a |
2.4 numpy.cumsum(a, axis=None)函数
1 | import numpy as np |
2.5 花式索引
1 | a = np.arange(0, 100, 10) |
2.6 布尔屏蔽
1 | import matplotlib.pyplot as plt |
图一
图二
图三
图四
注意下面的代码,系统出现了警告提示,意思就是说不能用非元组序列来作为数组的索引,将在后面的版本中视为错误。
1 | plt.plot(a[mask], b[mask], 'go') |
根据提示可以改为:
1 | plt.plot(a[tuple(mask)], b[tuple(mask)], 'go') |
最后补充一点:
1 | >>> a |