- 本质是多维数组
import numpy as np
# numpy版本 np.__version__
'1.21.2'
python list
list1 = list(range(10)) list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1[5]='hello list' list1
[0, 1, 2, 3, 4, 'hello list', 6, 7, 8, 9]
array
import array
arr1 = array.array('i',list(range(10)))
arr1
array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr1[5]='hello array' arr1
--------------------------------------------------------------------------- TypeError Traceback (most recent call last)in ----> 1 arr1[5]='hello array' 2 arr1 TypeError: an integer is required (got type str)
arr1[5] = 78 arr1
array('i', [0, 1, 2, 3, 4, 78, 6, 7, 8, 9])
numpy.ndarray
arr = np.array(list(range(10))) arr
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
type(arr)
numpy.ndarray
arr.dtype
dtype('int32')
arr[3] = 33 arr
array([ 0, 1, 2, 33, 4, 5, 6, 7, 8, 9])
arr[2]
2
arr[2] = 'hello ndarray' arr[2]
--------------------------------------------------------------------------- ValueError Traceback (most recent call last)in ----> 1 arr[2] = 'hello ndarray' 2 arr[2] ValueError: invalid literal for int() with base 10: 'hello ndarray'
arr[3] = 13.4 arr
array([ 0, 1, 2, 13, 4, 5, 6, 7, 8, 9])
arr1 = np.array([1,2,3.0]) arr1
array([1., 2., 3.])
arr1.dtype
dtype('float64')
arr2 = np.array([1,2,3],dtype=float)
arr2.dtype
dtype('float64')
def p_test(n):
a = [i**2 for i in range(n)]
b = [i**3 for i in range(n)]
c = []
for i in range(n):
c.append(a[i]+b[i])
return c
p_test(10)
[0, 2, 12, 36, 80, 150, 252, 392, 576, 810]
# 用numpy实现上述函数功能
def p_test1(n):
a = np.arange(n) ** 2
b = np.arange(n) ** 3
c = a + b
return c
p_test1(10)
array([ 0, 2, 12, 36, 80, 150, 252, 392, 576, 810], dtype=int32)
比较用时,numpy更快
%time res = p_test(10000000)
Wall time: 16.7 s
%time res = p_test1(10000000)
Wall time: 363 ms
矩阵和随机数的产生
np.array([1,2,3])
array([1, 2, 3])
np.array(range(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(2,20,2)
array([ 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.arange(2,20,0.3)
array([ 2. , 2.3, 2.6, 2.9, 3.2, 3.5, 3.8, 4.1, 4.4, 4.7, 5. ,
5.3, 5.6, 5.9, 6.2, 6.5, 6.8, 7.1, 7.4, 7.7, 8. , 8.3,
8.6, 8.9, 9.2, 9.5, 9.8, 10.1, 10.4, 10.7, 11. , 11.3, 11.6,
11.9, 12.2, 12.5, 12.8, 13.1, 13.4, 13.7, 14. , 14.3, 14.6, 14.9,
15.2, 15.5, 15.8, 16.1, 16.4, 16.7, 17. , 17.3, 17.6, 17.9, 18.2,
18.5, 18.8, 19.1, 19.4, 19.7])
np.zeros(10,dtype=int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros(shape=(3,5),dtype=int)
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
np.ones(10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones(10,dtype=int)
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
np.ones(shape=(4,4),dtype=int)
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
np.full(10,99)
array([99, 99, 99, 99, 99, 99, 99, 99, 99, 99])
np.full((3,5),99)
array([[99, 99, 99, 99, 99],
[99, 99, 99, 99, 99],
[99, 99, 99, 99, 99]])
等差数列
np.linspace(0,10,10)
array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444,
5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])
np.linspace(0,10,10,dtype=int)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10])
随机数
np.random.randint(0,20)
9
np.random.randint(0,10,size=5)
array([0, 8, 0, 5, 1])
np.random.randint(0,10,size=(3,5))
array([[9, 4, 9, 1, 6],
[9, 8, 7, 8, 3],
[6, 0, 3, 6, 4]])
# 控制随机数不变 np.random.seed(2) np.random.randint(1,20,size=(4,5))
array([[ 9, 16, 14, 9, 12],
[19, 12, 9, 8, 3],
[18, 12, 16, 6, 8],
[ 4, 7, 5, 11, 12]])
np.random.random()
0.7197542323569591
np.random.random((3,5))
array([[0.25849809, 0.54620732, 0.40730783, 0.17698462, 0.96963241],
[0.29701836, 0.28786882, 0.11619332, 0.18172704, 0.49428977],
[0.56576513, 0.22183517, 0.76749117, 0.57730807, 0.16782331]])
ndarray基础操作
a = np.ones((3,5))
a
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
a.ndim
2
a.shape
(3, 5)
a.size
15
a.reshape(5,3)
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
取值
x = np.arange(15).reshape(3,5) x
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
x[0]
array([0, 1, 2, 3, 4])
x[-1]
array([10, 11, 12, 13, 14])
x[0][1]
1
x[(0,1)]
1
x[0,1]
1
x[(0,1),(2,3)]
array([2, 8])
切片
y = np.arange(10) y
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y[0:5]
array([0, 1, 2, 3, 4])
y[:5]
array([0, 1, 2, 3, 4])
y[5:]
array([5, 6, 7, 8, 9])
y[0:8:2]
array([0, 2, 4, 6])
y[::2]
array([0, 2, 4, 6, 8])
y[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
a = np.arange(16).reshape(4,4) a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
# 取前两行,前三列 a[0:2,0:3]
array([[0, 1, 2],
[4, 5, 6]])
a[:2,:3]
array([[0, 1, 2],
[4, 5, 6]])
a[:2,::2]
array([[0, 2],
[4, 6]])
a[::-1,::-1]
array([[15, 14, 13, 12],
[11, 10, 9, 8],
[ 7, 6, 5, 4],
[ 3, 2, 1, 0]])
a.T
array([[ 0, 4, 8, 12],
[ 1, 5, 9, 13],
[ 2, 6, 10, 14],
[ 3, 7, 11, 15]])
矩阵合并
x1 = np.array([[20,178],[23,180]]) x1
array([[ 20, 178],
[ 23, 180]])
x2 = np.array([[1],[0]]) x2
array([[1],
[0]])
x = np.concatenate([x1,x2],axis=1) x
array([[ 20, 178, 1],
[ 23, 180, 0]])
聚合操作
m = np.arange(16).reshape(4,4) m
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
np.sum(m)
120
np.max(m)
15
np.min(m)
0
np.mean(m)
7.5



