接上上篇blog: Numpy基础功能索引
ndarray
ndarray(数组)作为Numpy中定义的一个对象,是Numpy的基础。ndarray是一个同构数据多维容器。也就是说,ndarray作为一个容器,其中数据的数据类型必需是相同的,其中的数据可以是多维的。ndarray有两个属性来形容它自己:shape表示数组结构+dtype表示数组的数据类型。
创建数组
最常用的是np.array()
In [48]: data = np.array([[1, 2], [11, 12]], dtype=str)
In [50]: data
Out[50]:
array([['1', '2'],
['11', '12']],
dtype='|S2')
In [51]: data.astype(int)
Out[51]:
array([[ 1, 2],
[11, 12]])
tips:代码中的int会自动转成np中的数据类型np.int1
创建数组的函数 | 描述 |
---|---|
np.arange() | range()的数组 |
np.ones() | 全1数组 |
np.zeros() | 全0数组 |
np.empty() | 创建空数组,但是返回的是垃圾值,不是0 |
np.ones_like() | 创建形如…的元素都为1的数组 |
np.zeros_like() | 创建形如…的元素都为0的数组 |
np.empty_like() | 创建形如…的元素为空的数组 |
np.eye() | 单位方阵 |
np.identify() | 也是单位方阵 |
Numpy中的切片
Numpy的切片与list中类似,不做详述2。但是Numpy中的切片得到的是原始数据的视图,如果在视图改变数据,那么原始数据也会改变。如果要得到原始数据的复制,则要显式的表达arr[5:8].copy()特例是bool型索引,它返回的是原始数据的复制。
bool型索引
In [53]: data = np.random.randn(7, 4)
In [54]: data < 0
Out[54]:
array([[False, True, False, False],
[False, False, False, False],
[ True, False, True, True],
[ True, False, True, True],
[ True, False, True, False],
[ True, True, True, False],
[False, True, False, False]], dtype=bool)
In [55]: data[data < 0] = 0
In [56]: data
Out[56]:
array([[ 1.4368676 , 0. , 1.04331785, 0.96806906],
[ 0.40453328, 0.08870373, 1.45806316, 0.14055398],
[ 0. , 0.73339497, 0. , 0. ],
[ 0. , 2.23611536, 0. , 0. ],
[ 0. , 1.23302155, 0. , 1.66173436],
[ 0. , 0. , 0. , 0.68743457],
[ 0.59085145, 0. , 0.85077155, 0.24273212]])
Numpy中的排序
可以指定轴,如arr.sort(1),返回的也是视图。
np.unique():唯一化加排序
Numpy中的线性代数
数组的转置arr.T
常用的numpy.linalg函数如下表所示:
函数 | 说明 |
---|---|
diag | 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0) |
dot | 矩阵乘法 |
trace | 计算对角线元素的和 |
det | 计算矩阵行列式 |
eig | 计算方阵的本征值和本征向量 |
inv | 计算方阵的逆 |
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算QR分解 |
svd | 计算奇异值分解 |
solve | 解线性方程组Ax=b,其中A为一个方阵 |
lstsq | 计算Ax=b的最小二乘解 |
-
笔者的话
- Numpy基础功能索引到这里就完成了,写这两篇博客的目的一方面是练习写csdn的markdown,另一方面是为了做一个简单的索引表,以后想用numpy实现某些功能的时候就不用翻书了。