上一章我们讲到了ndarray的基本操作,这一章我们仍然从基本操作开始
上一章地址 Python3------NumPy学习(一) https://blog.csdn.net/jiayouLau/article/details/84432155
2.4.5----切片
有数据如下:array(8行10列)
array([[-0.03862668, -1.46128096, -0.75596237, 0.89737022, -1.86978433,
0.38845392, 1.14856354, -1.10912275, 1.28900021, -0.86801677],
[ 1.8701446 , 0.50407342, -0.74396489, -1.69641331, -0.89969227,
2.42459765, 0.78987443, -0.82935223, 0.82546455, 0.40524289],
[-1.7365776 , -0.81501515, -1.08974743, -1.4138561 , 0.85495155,
0.30076624, -2.0813311 , 1.52886975, 0.62945643, -1.48714683],
[-1.12084983, -0.63070289, -0.20677245, -0.49096973, -0.40551104,
-0.46320893, -0.73190969, 0.00392486, 2.524498 , 0.25843191],
[ 0.05001371, 0.52267878, 1.31974783, 0.64840953, 1.56360431,
-0.79233575, 1.47275167, 0.61070343, -0.33247221, -0.57492172],
[ 0.7092757 , 0.00928591, 0.27008373, 0.79050681, -0.95887888,
0.03661459, 0.81303927, -0.54139691, 0.69623969, 0.06570421],
[-1.40481949, 0.49151272, 1.01992235, 1.89152928, -0.76415623,
0.3100241 , 1.27156806, -1.76199057, -0.77419965, -0.17574386],
[-0.21745814, -1.78433763, -0.7953073 , 0.4765644 , -0.2589575 ,
0.97014013, 1.67321489, 1.73370987, 0.29886514, 1.27186522]])
想要获得第一行的前五列数据怎么操作?
b = array[0,0:5]
print(b)
------------
[-0.03862668 -1.46128096 -0.75596237 0.89737022 -1.86978433]
参数[0,0:5]中,第一个0表示想要截取的行,0:5表示想要截取的列包含第0列但是不包含第5列
如果想要截取所有行或者所有列可以写成:,如:所有行的前3列 [:,0:3]
[[-0.03862668 -1.46128096 -0.75596237]
[ 1.8701446 0.50407342 -0.74396489]
[-1.7365776 -0.81501515 -1.08974743]
[-1.12084983 -0.63070289 -0.20677245]
[ 0.05001371 0.52267878 1.31974783]
[ 0.7092757 0.00928591 0.27008373]
[-1.40481949 0.49151272 1.01992235]
[-0.21745814 -1.78433763 -0.7953073 ]]
如果想要得到某些行的所有列也同理
下面讲一下多维数组(矩阵)的索引
有如下矩阵:
a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]] ])
x = a1[0,1,2]
print(x)
-----------
6
在numpy学习(一)中讲到的构成单元,这里也可以按构成单元的方法来分析。
下面简单介绍一下数组去重,看一个例子就好
temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
b = np.unique(temp)
print(b)
---------------------------
[1 2 3 4 5 6]
3------ndarray的运算
3.1------逻辑运算
有如下数据:
[[-0.03862668 -1.46128096 -0.75596237 0.89737022 -1.86978433]
[ 1.8701446 0.50407342 -0.74396489 -1.69641331 -0.89969227]
[-1.7365776 -0.81501515 -1.08974743 -1.4138561 0.85495155]
[-1.12084983 -0.63070289 -0.20677245 -0.49096973 -0.40551104]
[ 0.05001371 0.52267878 1.31974783 0.64840953 1.56360431]]
需求:以0.5为界,将这个5行5列的矩阵中大于0.5的数据变为true,反之变为false。
array=array>0.5
print(array)
-----------------
[[False False False True False]
[ True True False False False]
[False False False False True]
[False False False False False]
[False True True True True]]
需求:将数据大于0.5的数据变为1
array[array>0.5]=1
print(array)
-----------------
[[-0.03862668 -1.46128096 -0.75596237 1. -1.86978433]
[ 1. 1. -0.74396489 -1.69641331 -0.89969227]
[-1.7365776 -0.81501515 -1.08974743 -1.4138561 1. ]
[-1.12084983 -0.63070289 -0.20677245 -0.49096973 -0.40551104]
[ 0.05001371 1. 1. 1. 1. ]]
这一类的判断方法还有:np.all() np.any() 判断所有/是否存在元素满足某个条件
三元运算符: np.where(condition,result1,result2)-----condition为判断条件,满足则返回result1,否则返回result2
3.2------统计运算
- min(a[, axis, out, keepdims])------计算数组或者矩阵中的最小元素
- Return the minimum of an array or minimum along an axis.
- max(a[, axis, out, keepdims])------计算数组或者矩阵中的最大元素
- Return the maximum of an array or maximum along an axis.
- median(a[, axis, out, overwrite_input, keepdims])------计算数组或者矩阵所有元素的中位数
- Compute the median along the specified axis.
- mean(a[, axis, dtype, out, keepdims])------计算数组或者矩阵所有元素的算术平均值
- Compute the arithmetic mean along the specified axis.
- std(a[, axis, dtype, out, ddof, keepdims])------计算数组或者矩阵所有元素的标准差
- Compute the standard deviation along the specified axis.
- var(a[, axis, dtype, out, ddof, keepdims])------计算数组或者矩阵所有元素的方差
- Compute the variance along the specified axis.
这里有一个参数需要特别注意----axis,表述轴,进一步----0代表列,1代表行。即可以根据某个数组或者矩阵中的某些行和列进行计算。
看代码:
a = np.array([[1,2,3,4],
[2,3,4,5],
[3,4,5,6],
[4,5,6,7]])
c = np.min(a,1)
print("c中每一行的最小值是:",c)
c = np.max(a[:,0:2],0)
print("c中所有行的前两列的最大值是:",c)
------------------
c中每一行的最小值是: [1 2 3 4]
c中所有行的前两列的最大值是: [4 5]
3.3------数组(矩阵)与数的计算
这里没什么好说的,对应不同的操作,分别将数组或矩阵中的每个元素做对应的操作。
3.4------数组、矩阵之间的计算
对于维数不相同的数组或者矩阵,这里不做介绍。
这里介绍如下方法
np.mulply() ----数组中对应元素相乘
np.matmul() np.dot() ----矩阵相乘
运算符号: * @ 也可以进行运算,其中当使用np.matrix()获得矩阵,此时这两个运算符都表示矩阵相乘
其他情况下, *表示对应元素相乘,@表示矩阵相乘
3.5------合并
- numpy.concatenate((a1, a2, ...), axis=0)
这里axis代表轴,0表示列,1表示行,即按行/列进行合并
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
c = np.concatenate((a, b), axis=0)
print(c)
d = np.concatenate((a, b.T), axis=1)
print(d)
------------------
[[1 2]
[3 4]
[5 6]]
[[1 2 5]
[3 4 6]]
- numpy.hstack(tup) Stack arrays in sequence horizontally (column wise)----已行为单位操作
- numpy.vstack(tup) Stack arrays in sequence vertically (row wise).
这里参数为元组
a = np.array((1, 20))
b = np.array((5, 6))
c = np.hstack((a,b))
print(c)
d = np.vstack((a,b))
print(d)
------------------
[ 1 20 5 6]
[[ 1 20]
[ 5 6]]
3.6------分割
这里主要介绍np.spilt()方法,这其中axis表示轴,0----切分列,1----切分行
A = np.arange(12).reshape(3, 4)
print A
print np.split(A, 2, axis = 1)
print np.split(A, 3, axis = 0)
------------------
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
-------------------------
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
------------------