保留初心,砥砺前行
在使用tensorflow的时候需要对输入的tensor进行处理。
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多。 ——百度百科
因此简单记录一下NumPy的学习笔记,方便进行数据处理。
NumPy官方网站
NumPy Tutorial
- NumPy的主要对象是齐次多维数组。这是一个的有相同类型的元素的表(通常是数字),索引是一个元组的正整数。在NumPy中维度被称为轴(axes)。axes的数量叫做rank。
例如,三维空间中的一个点的坐标[1, 2, 1]
是rank为1的数组,因为它有一个轴(axes),这个轴的长度为3。
在下边的例子中,这个数组有两个轴 (可以理解为横轴和纵轴)。纵轴的长度为2,横轴的长度为3。
[[ 1., 0., 0.],
[ 0., 1., 2.]]
NumPy的数组类叫做ndarray,别名array。
注意:这里的numpy.array和python标准库中的那个只能解决一维数组,只提供了少量功能的array.array不一样。-
ndarray的一些属性:
ndarray.ndim:
数组中轴的数量,如下图所示,该数组有横轴纵轴两条轴,所以ndarray.ndim值为2
ndarray.shape
数组的维度,是指明数组每一维的size的整形元组。
ndarray.size
数组的所有的数字的数量。
ndarray.dtype
描述数组中元素的类型的对象。从下图中可以看出返回值并不是一个数据类型,而是数据类型的对象。可以通过ndarray.dtype.name得到它的类型。
ndarray.itemsize
数组中每个元素的字节数。
-
创建数组:
使用array函数创建数组。数组的类型由数组中元素的类型得到。
注意:array函数中传入的要是一个list。
import numpy as np
a = np.array([1, 2, 3])
print a
[1 2 3]
import numpy as np
a = np.array([(1, 2, 3), (1, 2, 3), (1, 2, 3)])
print a
[[1 2 3]
[1 2 3]
[1 2 3]]
通常,一个数组的元素最初未知,但它的大小已知。因此NumPy提供了几个函数使用初始内容占位符来创建数组。
函数zeros
创建全0数组, 函数ones
创建全1数组, 函数empty
创建初始值随机的数组。这些数组默认类型为float64
,也可以在函数中制定类型
类似ones
和zeros
,存在函数ones_like
和zeros_like
,作用是创建一个与给出的数组相同形状和类型的全1或全0数组。
import numpy as np
a = np.zeros([2, 3])
print a
[[ 0. 0. 0.]
[ 0. 0. 0.]]
import numpy as np
a = np.ones([2, 3])
print a
[[ 1. 1. 1.]
[ 1. 1. 1.]]
import numpy as np
a = np.ones([2, 3], dtype=np.int32)
print a
[[1 1 1]
[1 1 1]]
import numpy as np
a = np.empty([2, 3])
print a
[[ 0.00000000e+000 2.68156175e+154 2.12354999e-314]
[ 2.12357331e-314 2.12357331e-314 2.12357336e-314]]
NumPy中有一个类似于range
功能的函数arange
,和range
基本相同,只是返回的不是list而是数组。
np.arange(1, 20, 3) #从1开始到20,间隔3
array([ 1, 4, 7, 10, 13, 16, 19])
函数linspace
,如下代码所示,在1到2中按等差数列找出10个元素。
np.linspace(1, 2, 10)
array([ 1. , 1.11111111, 1.22222222, 1.33333333, 1.44444444,
1.55555556, 1.66666667, 1.77777778, 1.88888889, 2. ])
其他数组创建方式见以下相关链接中NumPy(3)的内容。
相关链接:NumPy(2)reshape,dot,flat
相关链接:NumPy(3)full,eye,empty,random