numpy基础知识
文章目录
在python中有一种数据格式,如同list,dic,tuple,一样,ndarray叫做n维数组也可以叫做矩阵,一维数组的话就是列表。
ndarray创建
除了np.linspace()只可以创建一维数组外,其他均可以创建一维或多维数组。
由list创建
n1 = np.array([1,2,3,4])
n1
array([1, 2, 3, 4])
n2 = np.array([[1,2,3,4],[3,4,5,6]])
n2
array([[1, 2, 3, 4],
[3, 4, 5, 6]])
n2.shape
(2, 4)
n3 = np.array(list('ABC'))
n3
array(['A', 'B', 'C'], dtype='<U1')
使用np.routines函数创建
-
np.ones(shape, dtype=None, order=‘C’)
np.ones((8,10),dtype=int)
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]) -
np.zeros(shape, dtype=None, order=‘C’)
-
np.full(shape, fill_value,dtype=None, order=‘C’)
np.full((19,10),fill_value=1024)
array([[1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024], [1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024]])
-
np.eye() 满秩矩阵
np.eye(10)
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
-
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 一维
# lin = linear 线性 np.linspace(0,100,50)
array([ 0. , 2.04081633, 4.08163265, 6.12244898, 8.16326531, 10.20408163, 12.24489796, 14.28571429, 16.32653061, 18.36734694, 20.40816327, 22.44897959, 24.48979592, 26.53061224, 28.57142857, 30.6122449 , 32.65306122, 34.69387755, 36.73469388, 38.7755102 , 40.81632653, 42.85714286, 44.89795918, 46.93877551, 48.97959184, 51.02040816, 53.06122449, 55.10204082, 57.14285714, 59.18367347, 61.2244898 , 63.26530612, 65.30612245, 67.34693878, 69.3877551 , 71.42857143, 73.46938776, 75.51020408, 77.55102041, 79.59183673, 81.63265306, 83.67346939, 85.71428571, 87.75510204, 89.79591837, 91.83673469, 93.87755102, 95.91836735, 97.95918367, 100. ])
-
arange([start,] stop[, step,], dtype=None) 一维 左闭又开
np.arange(0,100,2)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])
-
randint(low, high=None, size=None, dtype=‘l’)
np.random.randint(0,100,size=10)
array([34, 67, 47, 0, 32, 65, 60, 7, 29, 9])
-
randn(d0, d1, …, dn) 标准正太分布
np.random.randn(100)
array([ 9.29583638e-01, -2.40494012e-01, -1.54880085e+00, -1.18131506e-01, -3.87412316e-01, -1.23791256e+00, 2.46981545e+00, 1.04596385e+00, 5.11005626e-01, 3.95014962e-04, 6.36618463e-01, 5.99536203e-01, 5.08082464e-01, 1.34371861e-01, 1.63049022e+00, 5.15438536e-01, 9.79886535e-01, -1.03343210e+00, -1.78752211e+00, 1.59892428e-01, 6.62543692e-01, -1.83891805e-01, 2.36549373e-01, -1.43428794e+00, -1.30311506e+00, 2.18125721e+00, -7.48955299e-01, -2.20360371e+00, 5.14008608e-01, -8.08925384e-01, 5.59930463e-01, 1.70078574e-02, -5.53738914e-01, 4.54157169e-01, 1.23390498e+00, -1.19633192e-02, 1.21316312e+00, -7.74635594e-01, -4.99006315e-01, -4.71089502e-01, 3.91745177e-01, 1.25073473e+00, 5.99684476e-01, 7.79949784e-02, -1.53474734e+00, -1.30015440e+00, -9.93332385e-01, -6.84729883e-02, 6.17898276e-01, 1.55839295e-01, -9.74375340e-01, 1.29065509e+00, 2.02523710e-01, -8.36991477e-01, 3.78974117e-01, -1.08292565e+00, -1.09468011e+00, -1.22314953e+00, 1.92083860e+00, 3.95360086e-01, 7.53084724e-01, 9.47536876e-01, 8.45936325e-01, 1.20138434e+00, 3.75788241e-01, 8.44851316e-01, 3.33716508e-01, 8.15823029e-01, -1.54211905e+00, -1.04696822e-01, 3.33022185e-01, 2.55936392e-01, -5.79156621e-01, -9.79757391e-01, -1.36913066e+00, 1.49904805e+00, 1.62805561e-02, -1.66471605e-01, 8.16514334e-01, 1.03849912e+00, 8.42648986e-01, 5.54344315e-01, 8.63057027e-02, 4.79845157e-01, 3.09233311e-01, 1.23818725e+00, -1.40764063e-01, -1.40356641e+00, 1.50714791e+00, 9.12485068e-01, 2.62313182e-01, -7.37704901e-01, -5.67301131e-01, 1.31855866e+00, 8.41198925e-01, -1.12843622e+00, -1.02621887e+00, 2.09696491e+00, -1.79763991e+00, 5.19901822e-02])
-
normal(loc=0.0, scale=1.0, size=None) 正太分布
np.random.normal(loc=175,scale=10,size =15)
array([182.04372848, 172.45799599, 175.38835881, 184.93946606, 186.82865998, 167.56207879, 174.47448983, 186.65189832, 167.08682158, 179.22340266, 156.89027635, 164.98120485, 169.14664295, 184.92902583, 185.06685415])
-
np.random.random(size=None) 生成0到1的随机数,左闭右开
np.random.random(size=10)
array([0.14184352, 0.32602578, 0.84404475, 0.08115584, 0.16118511, 0.01345415, 0.68656484, 0.82920519, 0.46515306, 0.47630647])
np.random.random(size=(50,50,3)) # jpg 0-255 png 0-1
array([[[0.77510855, 0.50431834, 0.58172162], [0.57190224, 0.64931629, 0.32118527], [0.00307274, 0.82749747, 0.98918687], ..., [0.90989473, 0.73828561, 0.73308725], [0.918006 , 0.37265469, 0.24465164], [0.88188722, 0.69745182, 0.14236788]], [[0.52146927, 0.96813976, 0.5218978 ], [0.61156258, 0.86086399, 0.0451758 ], [0.65282898, 0.21852094, 0.76603791], ..., [0.71680171, 0.22700938, 0.93433831], [0.79490029, 0.91488167, 0.85724234], [0.08631442, 0.09735808, 0.92812032]], [[0.68081873, 0.86206135, 0.42196991], [0.29429977, 0.06776767, 0.22277872], [0.09108285, 0.6356439 , 0.08196635], ..., [0.65212634, 0.89255668, 0.70723804], [0.99733278, 0.27508517, 0.12980421], [0.84525588, 0.94974487, 0.23050974]], ..., [[0.90531625, 0.00730948, 0.9003953 ], [0.11805442, 0.53721121, 0.5795969 ], [0.57738025, 0.80763817, 0.66423375], ..., [0.08165169, 0.1041306 , 0.97073386], [0.00932823, 0.98676353, 0.79321102], [0.7890455 , 0.5781148 , 0.28296647]], [[0.41889841, 0.19609236, 0.03216445], [0.1571943 , 0.85340774, 0.67519321], [0.90793631, 0.02364244, 0.63334361], ..., [0.95559939, 0.99922986, 0.16202791], [0.45739639, 0.11240036, 0.32076863], [0.93038134, 0.98131301, 0.00379627]], [[0.89344184, 0.6739045 , 0.18309083], [0.89895386, 0.81434073, 0.91353009], [0.4531639 , 0.22220111, 0.92134242], ..., [0.96937656, 0.78791459, 0.30536668], [0.12994018, 0.63912652, 0.92764144], [0.09584946, 0.26743536, 0.75149513]]])
索引和切片方法同列表 左闭右开
n1 = np.random.randint(10,200,(3,4,5))
n1
array([[[ 52, 26, 183, 128, 175],
[ 47, 41, 185, 83, 43],
[173, 92, 150, 14, 104],
[109, 69, 153, 27, 99]],
[[ 17, 138, 193, 48, 47],
[173, 147, 76, 193, 180],
[149, 61, 45, 188, 175],
[ 35, 157, 78, 197, 22]],
[[160, 122, 16, 62, 36],
[ 29, 168, 33, 14, 85],
[100, 19, 49, 13, 75],
[156, 155, 126, 170, 65]]])
n1[0,1:3,2]
array([185, 150])
数据反转:
n3 = np.arange(0,10,1)
n3
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 倒序
n3[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
变形
n3.shape
(10,)
np.reshape(a=n3,newshape=(2,5))
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
n1
array([[[ 52, 26, 183, 128, 175],
[ 47, 41, 185, 83, 43],
[173, 92, 150, 14, 104],
[109, 69, 153, 27, 99]],
[[ 17, 138, 193, 48, 47],
[173, 147, 76, 193, 180],
[149, 61, 45, 188, 175],
[ 35, 157, 78, 197, 22]],
[[160, 122, 16, 62, 36],
[ 29, 168, 33, 14, 85],
[100, 19, 49, 13, 75],
[156, 155, 126, 170, 65]]])
n1.reshape((-1))
# reshape()参数可以为负,负多少都可以结果都是自动变为一维数组
array([ 52, 26, 183, 128, 175, 47, 41, 185, 83, 43, 173, 92, 150,
14, 104, 109, 69, 153, 27, 99, 17, 138, 193, 48, 47, 173,
147, 76, 193, 180, 149, 61, 45, 188, 175, 35, 157, 78, 197,
22, 160, 122, 16, 62, 36, 29, 168, 33, 14, 85, 100, 19,
49, 13, 75, 156, 155, 126, 170, 65])
n1 = np.random.randint(0,10,size=(3,4))
n1
array([[4, 6, 1, 8],
[9, 6, 6, 9],
[2, 8, 8, 9]])
及联
np.concatenate() axis默认为0 注意维度对应
np.concatenate((n1,n1))
array([[4, 6, 1, 8],
[9, 6, 6, 9],
[2, 8, 8, 9],
[4, 6, 1, 8],
[9, 6, 6, 9],
[2, 8, 8, 9]])
np.concatenate((n1,n1),axis=1)
array([[4, 6, 1, 8, 4, 6, 1, 8],
[9, 6, 6, 9, 9, 6, 6, 9],
[2, 8, 8, 9, 2, 8, 8, 9]])
np.hstack() 与 np.vstack()
np.hstack() : horizontal 水平及联,可以降维
np.vstack() : vertical 垂直及联,升高维度
nn = np.arange(0,10,2)
nn1 = np.vstack(nn)
nn1
array([[0],
[2],
[4],
[6],
[8]])
np.hstack(nn1)
array([0, 2, 4, 6, 8])
切分
- np.split
n5 = np.random.randint(0,150,size=(5,7))
n5
array([[ 81, 69, 128, 28, 13, 3, 95],
[103, 99, 16, 11, 22, 118, 148],
[ 7, 26, 122, 47, 59, 18, 14],
[142, 133, 113, 21, 45, 18, 23],
[124, 56, 28, 118, 117, 71, 27]])
np.split(n5,(1,3))
[array([[ 81, 69, 128, 28, 13, 3, 95]]),
array([[103, 99, 16, 11, 22, 118, 148],
[ 7, 26, 122, 47, 59, 18, 14]]),
array([[142, 133, 113, 21, 45, 18, 23],
[124, 56, 28, 118, 117, 71, 27]])]
np.split(n5,(1,3),axis=1)
[array([[ 81],
[103],
[ 7],
[142],
[124]]), array([[ 69, 128],
[ 99, 16],
[ 26, 122],
[133, 113],
[ 56, 28]]), array([[ 28, 13, 3, 95],
[ 11, 22, 118, 148],
[ 47, 59, 18, 14],
[ 21, 45, 18, 23],
[118, 117, 71, 27]])]
n5
array([[ 81, 69, 128, 28, 13, 3, 95],
[103, 99, 16, 11, 22, 118, 148],
[ 7, 26, 122, 47, 59, 18, 14],
[142, 133, 113, 21, 45, 18, 23],
[124, 56, 28, 118, 117, 71, 27]])
np.vsplit() : 在竖直方向切,切分的就是行
np.hsplit() : 在水平方向切,切分的就是列
np.vsplit(n5,(2,4))
[array([[ 81, 69, 128, 28, 13, 3, 95],
[103, 99, 16, 11, 22, 118, 148]]),
array([[ 7, 26, 122, 47, 59, 18, 14],
[142, 133, 113, 21, 45, 18, 23]]),
array([[124, 56, 28, 118, 117, 71, 27]])]
np.hsplit(n5,(2,3))
[array([[ 81, 69],
[103, 99],
[ 7, 26],
[142, 133],
[124, 56]]), array([[128],
[ 16],
[122],
[113],
[ 28]]), array([[ 28, 13, 3, 95],
[ 11, 22, 118, 148],
[ 47, 59, 18, 14],
[ 21, 45, 18, 23],
[118, 117, 71, 27]])]
副本
所有赋值运算不会为ndarray的任何元素创副本,对赋值后的对象的操作也对原来对象生效。
# 列表不是ndarray
l = list("SASFdsaf")
l
['S', 'A', 'S', 'F', 'd', 's', 'a', 'f']
n = np.array(l)
n
array(['S', 'A', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n[1] = 'a'
n
array(['S', 'a', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
l
['S', 'A', 'S', 'F', 'd', 's', 'a', 'f']
n1 = n
n1[1] = 2
n1
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
创建副本使用 np.copy()
n3 = n1.copy()
n3
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n3[0] = 1
n3
array(['1', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')
n1
array(['S', '2', 'S', 'F', 'd', 's', 'a', 'f'], dtype='<U1')