python Numpy库与多维数组
前提:
在python内置环境中,直接存储的数组(array)对象只存在一维结构,无法支持多维结构,也没有相关数组运算函数。
高维数组:Numpy库的核心
- ndarray对象
数组类型的对象大小固定,数组内元素的数据类型相同。
创建数组
- 首先导入NumPy包
import numpy as np
2.array()函数创建多维数组
array1 = np.array(range(6))
- shape属性可以查看array1的数据结构。
array1.shape
输出:(6,)
修改shape,使其变为二维结构:
array1.shape = 2,3
print(array1)
out:[[0 1 2]
[3 4 5]]
此时数据元素值在内存中的位置并没有改变。
- reshape()函数
在一个数组的基础上创建一个新的数组
array2 = array1.reshape(3,2)
print(array2)
out:[[0 1]
[2 3]
[4 5]]
array1的属性不会发生变化;
array1.shape
out:(2, 3)
array1和array2共用内存中的数据存储值,若更改其中任意一个数组中的元素取值,则另一个数组相对应的元素值也会改变。
3. 多维结构的数组也可以直接通过array()函数创建
array3 = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
- 利用arange()函数生成数组
arange()函数可以通过设置起始值,结束值和步长来生成等差序列形式的一维数组。
array4 = np.arange(13,1,-1)
out:[13 12 11 10 9 8 7 6 5 4 3 2]
arange()函数在创建数组序列时,不包括结束值。
5. linspace()函数
该函数通过设置起始值、结束值和元素的个数来创建一维数组。
可由endpoint参数决定是否需要包括结束值,默认包括。
```python
array5 = np.linspace(1,12,12,endpoint = True)
print(array5)
out:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
默认数据类型为浮点型,参数dtype设置类型。
array6 = np.linspace(1,12,12,dtype=int)
print(array6)
out:
[ 1 2 3 4 5 6 7 8 9 10 11 12]
- 在不知道数组具体值时创建数组
-
zeros()函数生成元素全部为0的数组
-
ones()函数生成元素全部为1的数组
-
empty()函数生成给定维度的,无初始值的数组
在默认的情况下,生成数组的元素类型为float64
数组元素索引与切片
-
提取单个或多个元素:
array[start🔚step]
返回的结果是索引值为start到end-1之间,并且是索引值与start之差可以被step整除的连续对象。
提取的新数组与原来数组共享数据内存空间。使用整型数组作为索引也可以提取数组中的元素,与原数组不共享内存数据空间。
array1[[0,1,4]]
2.多维数组元素的提取:
创建一个二维结构数组,第0轴长度为4,第1轴长度为6
na1 = np.array(np.arange(24),dtype=int).reshape(4,6)
out:[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
- 在第0轴上,取索引值为0,1的元素,共两行
在第1轴上,取索引值为1,2,3,4,5的元素,共五列
na1[:2,1:]
out:array([[ 1, 2, 3, 4, 5],
[ 7, 8, 9, 10, 11]])
- 在第0轴上,取到的索引值为[2,3]
在第1轴上,取到的索引值为[2,4]
这样取到的两个元素分别为na1[2,2],na1[3,4]
na1[[2,3],[2,4]]
out:array([14, 22])
注意两种方法的区别
- 在第0轴上,索引为一个范围
在第1轴上,索引为一个数组
na1[2:,[2,4]]
out:array([[14, 16],
[20, 22]])
数组运算
创建一维数组ar1
ar1=np.array(np.arange(5))
Out:array([0, 1,2, 3,4])
数组中每个元素都加4
np.add(ar1,4)
Out: array([4,5,6,7,8)
创建一维数组ar2
ar2=np.array([2,3,4,5,6])
Out : array([2, 3, 4,5,6])
数组ar1和ar2相加
ar1+ar2
0ut: array([ 2, 4,6, 8,10])
用numpy库中的add函数做数组的加法
np.add(ar1,ar2)
Out:array([ 2 4. 6, 8,10])
如果想将ar1与ar2相加后的结果返给ar1,则可以将add()函数的第三个参数赋给ar1
np.add(ar1,ar2,ar1)