数据内容

This commit is contained in:
estomm
2022-01-18 19:35:38 +08:00
parent a57ccc4515
commit 356fabde48
7 changed files with 284 additions and 16 deletions

View File

@@ -12,7 +12,7 @@
## 关系
* 可以使用向量来定义n维线性空间、n维向量空间。向量以数学的方式描述n维线性空间。标量、向量、矩阵、张量是对n维线性空间的暴力展开。
* 维数数组总共有多少个维度。3维
* 维度:数组每个维度是多少。维度是(2,3,4)
* 维度:数组每个维的长度是多少。维度是(2,3,4)
* 范数用来衡量数组的特征。F1范数绝对值之和。F2范数平方和。
* 列表和张量不同。列表的低维的维度可以不同。[[1],[1,2]]。张量,相同维的维度必须一致。
* 对于张量的描述可以使三阶,一阶二维,二阶三维,三阶四维。
@@ -28,4 +28,18 @@
* 不同维度的四则运算,进行广播。
* 点乘,同维度,同位置相乘相加。
点乘,不同维度,
点乘,不同维度,
## 维度说明
ndarray(多维数组)是Numpy处理的数据类型。多维数组的维度即为对应数据所在的空间维度1维可以理解为直线空间2维可以理解为平面空间3维可以理解为立方体空间。
![](image/2022-01-18-14-52-13.png)
* 轴是用来对多维数组所在空间进行定义、描述的一组正交化的直线根据数学惯例可以用i,j,ki, j ,ki,j,k来表示。
* 在一维空间中用一个轴就可以表示清楚numpy中规定为axis 0空间内的数可以理解为直线空间上的离散点 (x i, )。
* 在二维空间中需要用两个轴表示numpy中规定为axis 0和axis 1空间内的数可以理解为平面空间上的离散点x iy j
* 在三维空间中需要用三个轴才能表示清楚在二维空间的基础上numpy中又增加了axis 2空间内的数可以理解为立方体空间上的离散点x iy jz k
> Python中可以用numpy中的ndim和shape来分别查看维度以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断有m层即为m维最外面1层对应axis0 依次为axis1axis2…

View File

@@ -40,7 +40,7 @@
[expand_dims](https://numpy.org/devdocs/reference/generated/numpy.expand_dims.html#numpy.expand_dims)(a, axis) | 扩展数组的形状。
[squeeze](https://numpy.org/devdocs/reference/generated/numpy.squeeze.html#numpy.squeeze)(a[, axis]) | 从数组形状中删除一维条目。
## 改变数组的种类
## 改变种类
方法 | 描述
---|---
@@ -104,3 +104,241 @@
[reshape](https://numpy.org/devdocs/reference/generated/numpy.reshape.html#numpy.reshape)(a, newshape[, order]) | 在不更改数据的情况下为数组赋予新的形状。
[roll](https://numpy.org/devdocs/reference/generated/numpy.roll.html#numpy.roll)(a, shift[, axis]) | 沿给定轴滚动数组元素。
[rot90](https://numpy.org/devdocs/reference/generated/numpy.rot90.html#numpy.rot90)(m[, k, axes]) | 在轴指定的平面中将阵列旋转90度。
## 数组拼接(博客)
> [参考文献](https://www.jb51.net/article/161997.htm)
| concatenate | 提供了axis参数用于指定拼接方向 |
|--------------|---------------------------|
| append | 默认先ravel再拼接成一维数组也可指定axis |
| stack | 提供了axis参数用于生成新的维度 |
| hstack | 水平拼接,沿着行的方向,对列进行拼接 |
| vstack | 垂直拼接,沿着列的方向,对行进行拼接 |
| dstack | 沿着第三个轴(深度方向)进行拼接 |
| column_stack | 水平拼接,沿着行的方向,对列进行拼接 |
| row_stack | 垂直拼接,沿着列的方向,对行进行拼接 |
| r_ | 垂直拼接,沿着列的方向,对行进行拼接 |
| c_ | 水平拼接,沿着行的方向,对列进行拼接 |
### 0. 维度和轴
在正确理解Numpy中的数组拼接、合并操作之前有必要认识下维度和轴的概念
ndarray(多维数组)是Numpy处理的数据类型。多维数组的维度即为对应数据所在的空间维度1维可以理解为直线空间2维可以理解为平面空间3维可以理解为立方体空间。
![](image/2022-01-18-15-09-49.png)
轴是用来对多维数组所在空间进行定义、描述的一组正交化的直线根据数学惯例可以用i,j,ki, j ,ki,j,k来表示。
* 在一维空间中用一个轴就可以表示清楚numpy中规定为axis 0空间内的数可以理解为直线空间上的离散点 (x iii, )。
* 在二维空间中需要用两个轴表示numpy中规定为axis 0和axis 1空间内的数可以理解为平面空间上的离散点x iiiy jjj
* 在三维空间中需要用三个轴才能表示清楚在二维空间的基础上numpy中又增加了axis 2空间内的数可以理解为立方体空间上的离散点x iiiy jjjz kkk
Python中可以用numpy中的ndim和shape来分别查看维度以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断有m层即为m维最外面1层对应axis0 依次为axis1axis2…
```py
>>> a = np.array([1,2,3])
>>> a.ndim # 一维数组
1
>>> a.shape # 在这个维度上的长度为3
(3,)
>>> b = np.array([[1,2,3], [4,5,6]])
>>> b.ndim # 二维数组
2
>>> b.shape # 在axis 0 上的长度为2 在axis 1上的长度为3.或者可以感性的理解为2行3列
(2, 3)
>>> c = np.array([[[1,2,3], [4,5,6]]])
>>> c.ndim # 三维数组
3
>>> c.shape # 在axis 0 上的长度为1在axis 1上的长度为2, 在axis 2上的长度为3. 或者可以感性的理解为1层2行3列
(1, 2, 3)
```
### 1. np.concatenate()
```py
concatenate(a_tuple, axis=0, out=None)
"""
参数说明:
a_tuple:对需要合并的数组用元组的形式给出
axis: 沿指定的轴进行拼接默认0即第一个轴
"""
```
示例
```
>>> import numpy as np
>>> ar1 = np.array([[1,2,3], [4,5,6]])
>>> ar2 = np.array([[7,8,9], [11,12,13]])
>>> ar1
array([[1, 2, 3],
[4, 5, 6]])
>>> ar2
array([[ 7, 8, 9],
[11, 12, 13]])
>>> np.concatenate((ar1, ar2)) # 这里的第一轴(axis 0)是行方向
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
>>> np.concatenate((ar1, ar2),axis=1) # 这里沿第二个轴,即列方向进行拼接
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])
>>> ar3 = np.array([[14,15,16]]) # shape为13的2维数组
>>> np.concatenate((ar1, ar3)) # 一般进行concatenate操作的array的shape需要一致当然如果array在拼接axis方向的size不一样也可以完成
>>> np.concatenate((ar1, ar3)) # ar3虽然在axis0方向的长度不一致但axis1方向上一致所以沿axis0可以拼接
array([[ 1, 2, 3],
[ 4, 5, 6],
[14, 15, 16]])
>>> np.concatenate((ar1, ar3), axis=1) # ar3和ar1在axis0方向的长度不一致所以报错
```
### 2. np.append()
```py
append(arr, values, axis=None)
"""
参数说明:
arrarray_like的数据
values: array_like的数据若axis为None则先将arr和values进行ravel扁平化,再拼接否则values应当与arr的shape一致或至多
在拼接axis的方向不一致
axis进行append操作的axis的方向默认无
"""
```
示例
```py
>>> np.append(ar1, ar2) # 先ravel扁平化再拼接所以返回值为一个1维数组
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13])
>>> np.append(ar1, ar2, axis=0) # 沿第一个轴拼接,这里为行的方向
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
>>> np.append(ar1, ar2, axis=1) # 沿第二个轴拼接,这里为列的方向
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])
Python客栈送红包纸质书
```
### 3. np.stack()
```py
stack(arrays, axis=0, out=None)
"""
沿着指定的axis对arrays(每个array的shape必须一样)进行拼接返回值的维度比原arrays的维度高1
axis默认为0即第一个轴若为-1即为第二个轴
"""
```
示例
```
>>> np.stack((ar1, ar2)) # 增加第一个维度axis0之后的axis向后顺延0—>1, 1—>2
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[11, 12, 13]]])
>>> np.stack((ar1, ar2), axis=1) # 增加第二个维度axis1之后的axis向后顺延, 1—>2
array([[[ 1, 2, 3],
[ 7, 8, 9]],
[[ 4, 5, 6],
[11, 12, 13]]])
>>> np.stack((ar1, ar2), axis=2) # 增加第三个维度axis2和axis=-1的效果一样原来的axis0和axis1保持不变
array([[[ 1, 7],
[ 2, 8],
[ 3, 9]],
[[ 4, 11],
[ 5, 12],
[ 6, 13]]])
```
关于维度增加的一种理解方式
![](image/2022-01-18-15-12-33.png)
### 4. hstack、vstack和vstack
```py
>>> np.hstack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])
>>> np.vstack((ar1,ar2)) # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
>>> np.dstack((ar1,ar2)) # 对于2维数组来说沿着第三轴深度方向进行拼接, 效果相当于stack(axis=-1)
array([[[ 1, 7],
[ 2, 8],
[ 3, 9]],
[[ 4, 11],
[ 5, 12],
[ 6, 13]]])
```
### 5. column_stack和row_stack
```py
>>> np.column_stack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])
>>> np.row_stack((ar1,ar2)) # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
```
### 6. np.r_ 和np.c_
常用于快速生成ndarray数据
```
>>> np.r_[ar1,ar2] # 垂直拼接,沿着列的方向,对行进行拼接
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
>>> np.c_[ar1,ar2] # 水平拼接,沿着行的方向,对列进行拼接
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])
```
### 7. 总结
对于两个shape一样的二维array来说:
增加行(对行进行拼接)的方法有:
```py
np.concatenate((ar1, ar2),axis=0)
np.append(ar1, ar2, axis=0)
np.vstack((ar1,ar2))
np.row_stack((ar1,ar2))
np.r_[ar1,ar2]
```
增加列(对列进行拼接)的方法有:
```py
np.concatenate((ar1, ar2),axis=1)
np.append(ar1, ar2, axis=1)
np.hstack((ar1,ar2))
np.column_stack((ar1,ar2))
np.c_[ar1,ar2]
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB