### argmin() 和 argmax() :求矩阵中最小元素和最大元素的索引
```python
import numpy as np
A = np.arange(2,14).reshape((3,4))
print(A)
print(np.argmin(A))
print(np.argmax(A))
```
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
0
11
### 求整个矩阵的均值
```python
print(np.mean(A))
print(A.mean())
print(np.average(A))
```
7.5
7.5
7.5
### 求解中位数的函数:
```python
print(np.median(A))
```
7.5
### 累加函数:cumsum()
```python
print(np.cumsum(A))
```
[ 2 5 9 14 20 27 35 44 54 65 77 90]
#### 在cumsum()函数中:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。比如元素9,在cumsum()生成的矩阵中序号为3,即原矩阵中2,3,4三个元素的和。
### 累差运算函数:diff()
```python
print(np.diff(A))
```
[[1 1 1]
[1 1 1]
[1 1 1]]
#### 该函数计算的便是每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。
### nonzero()函数:
```python
print(np.nonzero(A))
```
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
#### 这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
#### 对所有元素进行仿照列表一样的排序操作,但这里的排序函数仍然仅针对每一行进行从小到大排序操作:
```python
import numpy as np
A = np.arange(14,2, -1).reshape((3,4))
print(np.sort(A))
```
[[11 12 13 14]
[ 7 8 9 10]
[ 3 4 5 6]]
### 矩阵的转置有两种表示方法:
```python
print(np.transpose(A))
print(A.T)
```
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
[[14 10 6]
[13 9 5]
[12 8 4]
[11 7 3]]
### clip()函数
```python
print(A)
print(np.clip(A,5,9))
```
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
[[9 9 9 9]
[9 9 8 7]
[6 5 5 5]]
#### 这个函数的格式是clip(Array,Array_min,Array_max),顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,并将这些指定的元素转换为最小值或者最大值。
## Numpy 索引
### 一维索引
```python
import numpy as np
A = np.arange(3,15)
print(A)
print(A[3])
```
[ 3 4 5 6 7 8 9 10 11 12 13 14]
6
```python
A = np.arange(3,15).reshape((3,4))
print(A)
print(A[2])
```
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
### 二维索引
```python
print(A[1][1])
print(A[1, 1])
print(A[1, 1:3])
```
8
8
[8 9]
```python
for row in A:
print(row)
```
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
```python
for column in A.T:
print(column)
```
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
### 抽取指定范围的矩阵
```python
A[0:2,0:2]
```
array([[2, 3],
[6, 7]])
### 抽取行或列的索引不连续,可以把这几个索引放在数组里
```python
A[[0,2], 0:2]
```
array([[ 2, 3],
[10, 11]])
### 迭代输出
```python
import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A.flatten())
for item in A.flat:
print(item)
```
[ 3 4 5 6 7 8 9 10 11 12 13 14]
3
4
5
6
7
8
9
10
11
12
13
14
#### flatten()是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。
### apply_along_axis(func1d, axis, arr, *args, **kwargs):
参数:funct1d:聚合函数
axis:对那条轴进行迭代
arr:数组
### 另一种有选择性抽取数据的方法:条件表达式和布尔运算符
```python
import numpy as np
n = np.random.random((4,4))
n <0.5
n[n<0.5]
```
array([0.4056797 , 0.41886889, 0.41243354, 0.28667628, 0.29777787,
0.25386625, 0.38528587, 0.39119738, 0.01332086, 0.04075218])
### 形状变换
```python
n = np.random.random(12)
n.shape = (3,4)
n
```
array([[0.83254777, 0.44032215, 0.20834259, 0.67836786],
[0.26714159, 0.88024405, 0.86865931, 0.69952975],
[0.80682802, 0.202754 , 0.56515645, 0.52465079]])
### 还原数组
```python
n = n.ravel()
n
```
array([0.83254777, 0.44032215, 0.20834259, 0.67836786, 0.26714159,
0.88024405, 0.86865931, 0.69952975, 0.80682802, 0.202754 ,
0.56515645, 0.52465079])
```python
n.shape = (12)
n
```
array([0.83254777, 0.44032215, 0.20834259, 0.67836786, 0.26714159,
0.88024405, 0.86865931, 0.69952975, 0.80682802, 0.202754 ,
0.56515645, 0.52465079])
### 转置
```python
n.shape = (3,4)
x = n.transpose()
x
```
array([[0.83254777, 0.26714159, 0.80682802],
[0.44032215, 0.88024405, 0.202754 ],
[0.20834259, 0.86865931, 0.56515645],
[0.67836786, 0.69952975, 0.52465079]])