mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 18:44:19 +08:00
数据内容
This commit is contained in:
@@ -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维可以理解为立方体空间。
|
||||
|
||||

|
||||
|
||||
* 轴是用来对多维数组所在空间进行定义、描述的一组正交化的直线,根据数学惯例可以用i,j,ki, j ,ki,j,k来表示。
|
||||
|
||||
* 在一维空间中,用一个轴就可以表示清楚,numpy中规定为axis 0,空间内的数可以理解为直线空间上的离散点 (x i, )。
|
||||
* 在二维空间中,需要用两个轴表示,numpy中规定为axis 0和axis 1,空间内的数可以理解为平面空间上的离散点(x i,y j)。
|
||||
* 在三维空间中,需要用三个轴才能表示清楚,在二维空间的基础上numpy中又增加了axis 2,空间内的数可以理解为立方体空间上的离散点(x i,y j,z k)。
|
||||
|
||||
> Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2…
|
||||
|
||||
|
||||
@@ -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维可以理解为立方体空间。
|
||||
|
||||

|
||||
|
||||
轴是用来对多维数组所在空间进行定义、描述的一组正交化的直线,根据数学惯例可以用i,j,ki, j ,ki,j,k来表示。
|
||||
* 在一维空间中,用一个轴就可以表示清楚,numpy中规定为axis 0,空间内的数可以理解为直线空间上的离散点 (x iii, )。
|
||||
* 在二维空间中,需要用两个轴表示,numpy中规定为axis 0和axis 1,空间内的数可以理解为平面空间上的离散点(x iii,y jjj)。
|
||||
* 在三维空间中,需要用三个轴才能表示清楚,在二维空间的基础上numpy中又增加了axis 2,空间内的数可以理解为立方体空间上的离散点(x iii,y jjj,z kkk)。
|
||||
|
||||
Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2…
|
||||
|
||||
```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为(1,3)的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)
|
||||
"""
|
||||
参数说明:
|
||||
arr:array_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]]])
|
||||
```
|
||||
关于维度增加的一种理解方式
|
||||
|
||||
|
||||

|
||||
|
||||
### 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]
|
||||
```
|
||||
BIN
Python/numpy/image/2022-01-18-14-52-13.png
Normal file
BIN
Python/numpy/image/2022-01-18-14-52-13.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
BIN
Python/numpy/image/2022-01-18-15-09-49.png
Normal file
BIN
Python/numpy/image/2022-01-18-15-09-49.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
BIN
Python/numpy/image/2022-01-18-15-12-33.png
Normal file
BIN
Python/numpy/image/2022-01-18-15-12-33.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 410 KiB |
Reference in New Issue
Block a user