The Basics
import numpy as np
- arange 类似range 构造一个长度为15的数组
a=np.arange(15);a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
- reshape 将array中的元素重新排列,构成一个 m*n的矩阵
a=a.reshape(3,5);a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
- ndim 维度 shape 形状 size 矩阵中元素个数 dtype 数据类型 itemsize 元素大小
(a.ndim,a.shape,a.size,a.dtype,a.itemsize)
(2, (3, 5), 15, dtype('int64'), 8)
a=np.array([2,3,4]);a
array([2, 3, 4])
np.zeros((3,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
np.ones((3,4))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
np.empty((3,4))
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
np.arange(10,30,5)
array([10, 15, 20, 25])
np.linspace(0,2,9)
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
A = np.array( [[1,1],[0,1]] );B = np.array( [[2,0],[3,4]] )
A*B
array([[2, 0],
[0, 4]])
A.dot(B)
array([[5, 4],
[3, 4]])
a=np.random.random((2,3))
a.sum(),a.min(),a.max()
(1.6231236054863918, 0.015016836871937334, 0.9391410245273063)
b=np.arange(12).reshape((3,4));b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b.sum(axis=0)
array([12, 15, 18, 21])
索引切片和迭代
a=np.arange(10)**3;a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
a[2:5]
array([ 8, 27, 64])
a[::-1]
array([729, 512, 343, 216, 125, 64, 27, 8, 1, 0])
b=np.arange(20).reshape(5,4);b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
b[2,3]
11
b[0:5,1]
array([ 1, 5, 9, 13, 17])
b[:,1]
array([ 1, 5, 9, 13, 17])
b[1:3,:]
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
形状
a = np.floor(10*np.random.random((3,4)))
a.shape
(3, 4)
a.ravel()
array([ 5., 4., 8., 9., 1., 5., 0., 4., 5., 6., 7., 5.])
a.reshape(6,2)
array([[ 5., 4.],
[ 8., 9.],
[ 1., 5.],
[ 0., 4.],
[ 5., 6.],
[ 7., 5.]])
a.T
array([[ 5., 1., 5.],
[ 4., 5., 6.],
[ 8., 0., 7.],
[ 9., 4., 5.]])
a.T.shape
(4, 3)
数组合并
a = np.floor(10*np.random.random((2,2)));a
array([[ 5., 0.],
[ 8., 7.]])
b = np.floor(10*np.random.random((2,2)));b
array([[ 3., 8.],
[ 0., 9.]])
np.vstack((a,b))
array([[ 5., 0.],
[ 8., 7.],
[ 3., 8.],
[ 0., 9.]])
np.hstack((a,b))
array([[ 5., 0., 3., 8.],
[ 8., 7., 0., 9.]])
数组切分
a = np.floor(10*np.random.random((2,12)));a
array([[ 8., 0., 3., 3., 0., 1., 3., 8., 3., 5., 6., 6.],
[ 6., 7., 1., 3., 3., 6., 0., 8., 1., 3., 9., 3.]])
np.hsplit(a,3)
[array([[ 8., 0., 3., 3.],
[ 6., 7., 1., 3.]]), array([[ 0., 1., 3., 8.],
[ 3., 6., 0., 8.]]), array([[ 3., 5., 6., 6.],
[ 1., 3., 9., 3.]])]
索引技巧
a = np.arange(12)**2;a
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121])
i=np.array( [ 1,1,3,8,5 ]);i
array([1, 1, 3, 8, 5])
a[i]
array([ 1, 1, 9, 64, 25])
j = np.array( [ [ 3, 4], [ 9, 7 ] ] );j
array([[3, 4],
[9, 7]])
a[j]
array([[ 9, 16],
[81, 49]])
a = np.arange(12).reshape(3,4);a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b=a>4;b
array([[False, False, False, False],
[False, True, True, True],
[ True, True, True, True]], dtype=bool)
a[b]
array([ 5, 6, 7, 8, 9, 10, 11])
a[b]=0;a
array([[0, 1, 2, 3],
[4, 0, 0, 0],
[0, 0, 0, 0]])
随机数
import numpy.random as random
random.rand(2,2)
array([[ 0.22720579, 0.34879209],
[ 0.44804558, 0.60633532]])
random.randn(2,2)
array([[-0.52681005, 0.94763894],
[-0.0359733 , -0.49147302]])
random.randint(2,6,(3,3))
array([[4, 4, 5],
[5, 4, 3],
[2, 3, 2]])
random.random_sample((3,3))
array([[ 0.85905432, 0.65012434, 0.89731924],
[ 0.28359538, 0.11117507, 0.68106958],
[ 0.14467215, 0.62230059, 0.60000001]])
random.random_sample(3)
array([ 0.71007475, 0.93676534, 0.56104804])
random.random(3)
array([ 0.6353798 , 0.90959019, 0.13963355])
random.choice(5, 3)
array([4, 1, 3])
random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 2, 3])
arr = np.arange(10)
random.shuffle(arr)
arr
array([6, 8, 7, 1, 2, 9, 4, 0, 5, 3])
random.permutation(10)
array([9, 2, 1, 6, 5, 3, 7, 4, 0, 8])
排序,搜索,计数
data=random.permutation(10);data
array([0, 7, 6, 4, 1, 8, 5, 3, 9, 2])
data=data.reshape(2,5);data
array([[0, 7, 6, 4, 1],
[8, 5, 3, 9, 2]])
np.sort(data)
array([[0, 5, 3, 4, 1],
[8, 7, 6, 9, 2]])
np.argmax(data,axis=1)
array([1, 3])