python运算学习之Numpy ------ 数组的切片索引与循环遍历、条件和布尔数组、形状变化

数组的切片索引:

  数组的切片索引和列表非常类似,下面用代码简单说明

 1 a = np.random.rand(16).reshape(4, 4)
 2 print("数组a:\n", a)
 3 print(a[-1][1:4])
 4 Out[1]:
 5 数组a:
 6  [[0.04175379 0.43013992 0.5398909  0.40638248]
 7  [0.3305902  0.11958799 0.48680358 0.30755734]
 8  [0.00893887 0.3848716  0.21018253 0.88170218]
 9  [0.80198391 0.4922656  0.67535542 0.64647139]]
10 [0.4922656  0.67535542 0.64647139]

  由于和列表类似,且要符号多维数组的特征,所以这里不过多阐述。有需要参考列表的相关知识。

 

数组的循环遍历:

 1 a = np.random.rand(9).reshape(3, 3)
 2 print("数组a:\n", a)
 3 for row in a:
 4     print(row)  # 一行一行的输出
 5 for item in a.flat:
 6     print(item)
 7 # 通用的循环函数
 8 for_test = np.apply_along_axis(np.mean, axis=0, arr=a)  # apply_along_axis(func1d, axis, arr, *args, **kwargs)
 9 print("np.apply_along_axis的调试:\n", for_test)  # axis=0为按列,axis=1为按行
10 Out[2]:
11 数组a:
12  [[0.97420758 0.20766438 0.52942127]
13  [0.82673775 0.44288163 0.41729451]
14  [0.1373707  0.68103565 0.92256133]]
15 [0.97420758 0.20766438 0.52942127]
16 [0.82673775 0.44288163 0.41729451]
17 [0.1373707  0.68103565 0.92256133]
18 0.9742075804081937
19 0.20766438289931244
20 0.5294212665874829
21 0.8267377457345865
22 0.44288163199889663
23 0.4172945079908593
24 0.13737070280419617
25 0.6810356459375222
26 0.922561331228303
27 np.apply_along_axis的调试:
28  [0.64610534 0.44386055 0.62309237]

  np.apply_along_axis()方法在我们对矩阵按行按列操作的时候最好用它。注意,第一个参数是方法,方法可以是自己对矩阵每个元素操作的函数方法。

条件和布尔数组:

 
1 a = np.random.rand(9).reshape(3, 3)
2 print(a < 0.5)          # 输出布尔数组
3 print(a[a < 0.5])       # 输出true对应的元素
4 Out[3]:
5 [[ True False  True]
6  [False  True False]
7  [False  True False]]
8 [0.19353844 0.03944841 0.38137674 0.3069755 ]

数组 形状变化:

 1 a = np.random.rand(9).reshape(3, 3)
 2 a = a.ravel()  # 此时的a是一个新数组
 3 print(a)  # 将数组平铺成一维数组
 4 a.shape = (3, 3)  # 你也可以用reshape
 5 print(a)
 6 Out[4]:
 7 [0.83017305 0.11660585 0.83060752 0.221212   0.35489551 0.74925696
 8  0.61087204 0.85969402 0.90966368]
 9 [[0.83017305 0.11660585 0.83060752]
10  [0.221212   0.35489551 0.74925696]
11  [0.61087204 0.85969402 0.90966368]]

  注意用A.T表示转置,或者用A.transpose()。

 

posted @ 2018-07-29 22:19  巴蜀秀才  阅读(452)  评论(0编辑  收藏  举报