NumPy(Numerical Python的简称)是Python数值计算最重要 的基础包。⼤多数提供科学计算的包都是⽤NumPy的数组作为 构建基础。
ndarray
生成一个数组
这是一个一维数组,包含5个随机数
import numpy as np
data=np.random.randn(5)
data
-----------------------
array([-0.05005535, -0.33868845, -1.54246915, 1.35100212, 0.51923146])
随机生成一个二维数组(3行5列)
import numpy as np
data=np.random.randn(3,5)
data
-----------------
array([[-0.41155768, 0.28310154, -1.63553837, -0.52905269, 0.47231969],
[ 1.49229778, 0.42470805, -0.98589754, 0.0900258 , 0.47585042],
[-0.71018406, 0.02346366, -2.53173337, 0.61281454, 0.31399838]])
数组类型
import numpy as np
data=np.random.randn(3,5)
data.shape
------------------------------
(3, 5)
import numpy as np
data=np.random.randn(3,5)
data.dtype
------------------------------
dtype('float64')
自定义数组
data1=[1,3,5,7,9]
arr1=np.array(data1)
arr1
------------------------------
array([1, 3, 5, 7, 9])
data1=[[1,2,3],[4,5,6],[7,8,9]]
arr1=np.array(data1)
arr1
-----------------------------
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
数组的运算
data1=[1,3,5,7,9]
arr1=np.array(data1)
data2=[2,4,6,8,10]
arr2=np.array(data2)
arr1+arr2
-----------------------------
array([ 3, 7, 11, 15, 19])
data1=[1,3,5,7,9]
arr1=np.array(data1)
data2=[2,4,6,8,10]
arr2=np.array(data2)
(arr1+arr2)*10
----------------------------
array([ 30, 70, 110, 150, 190])
data1=[1,3,5,7,9]
arr1=np.array(data1)
data2=[2,4,6,8,10]
arr2=np.array(data2)
arr1*arr2
---------------------------
array([ 2, 12, 30, 56, 90])
新建特殊数组
值全为0的数组
arr1=np.zeros(10)
arr1
---------------------------
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
0~n的值
arr1=np.arange(10)
arr1
--------------------------
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
数据类型
定义数据类型
arr1=np.array([1,5,9],dtype=np.float64)
arr1.dtype
--------------------------
dtype('float64')
arr1=np.array([1,5,9],dtype=np.int32)
arr1.dtype
-----------------------
dtype('int32')
转换数据类型
arr1=np.array([1,5,9,20,55])
arr1.dtype
-----------------------
dtype('int32')
arr1=np.array([1,5,9,20,55])
float_arr1=arr1.astype(dtype=np.float64)
float_arr1.dtype
-----------------------
dtype('float64')
如果将浮点数化为整数,小数部分会被截取删除
arr1=np.array([1.22,5.35,9.58,20.15,55.689])
int_arr1=arr1.astype(dtype=np.int64)
int_arr1
-----------------------
array([ 1, 5, 9, 20, 55], dtype=int64)
索引和切片
arr=np.arange(10)
arr
-----------------------
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr=np.arange(10)
arr[8]
-----------------------
8
arr=np.arange(10)
arr[2:5]
-----------------------
array([2, 3, 4])
arr=np.arange(10)
arr[2]=5564
arr[4]=8888
arr
----------------------
array([ 0, 1, 5564, 3, 8888, 5, 6, 7, 8, 9])
在二维数组中
arr=np.array([[1,2,3],[9,7,6],[3,4,5]],dtype=int)
print(arr[0,0])
print(arr[0,1])
print(arr[0,2])
print(arr[1,0])
print(arr[1,1])
print(arr[1,2])
----------------------
1
2
3
9
7
6
通过循环进行索引
arr=np.array([[1,2,3],[9,7,6],[3,4,5]],dtype=int)
for i in range(3):
print(arr[i][i])
----------------------
1
7
5
其他索引方法
arr=np.arange(25).reshape(5,5)
arr
----------------------
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
arr=np.arange(25).reshape(5,5)
arr[[0,1,2,3,4],[4,3,2,1,0]]
----------------------
array([ 4, 8, 12, 16, 20])