认识Numpy—数组

Numpy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。
下面从数组的创建,随机数的生成,下标索引,维度的查看及改变等方面认识Numpy-数组。

#创建一维数组 
import numpy as np #导入 NumPy 库 
arr1 = np.array([1, 2, 3, 4]) #创建一维数组 
print(' 创建的数组为: ',arr1)
 创建的数组为:  [1 2 3 4]
# 创建二维数组
arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
print('创建的数组为:\n',arr2)
创建的数组为:
 [[ 1  2  3  4]
 [ 4  5  6  7]
 [ 7  8  9 10]]
#查看数组属性值
print('数组类型为:',arr2.dtype)  #查看数组类型
数组类型为: int32
print('数组元素个数为:',arr2.size)  #查看数组元素个数
数组元素个数为: 12
print('数组每个元素大小为:',arr2.itemsize)  #查看数组每个元素大小
数组每个元素大小为: 4
#重新设置数组的维度
arr2.shape = 4,3 #重新设置维度
print('重新设置维度后的arr2 为:',arr2)
重新设置维度后的arr2 为: [[ 1  2  3]
 [ 4  4  5]
 [ 6  7  7]
 [ 8  9 10]]
#创建数组的方式
print('使用arange函数创建的数组为:\n',np.arange(0,1,0.1))#0~0.9步长为0.1的等差数列
使用arange函数创建的数组为:
 [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
print('使用linspace函数创建的数组为:\n:',np.linspace(0, 1, 10))#0~1内等差数列
使用linspace函数创建的数组为:
: [0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
 0.66666667 0.77777778 0.88888889 1.        ]
print('使用logspace函数创建的数组为:\n',np.logspace(0, 1, 10))#1~10的一次方内等比数列
使用logspace函数创建的数组为:
 [ 1.          1.29154967  1.66810054  2.15443469  2.7825594   3.59381366
  4.64158883  5.9948425   7.74263683 10.        ]
print('使用zeros函数创建的数组为:\n',np.zeros((2,3)))#零矩阵
使用zeros函数创建的数组为:
 [[0. 0. 0.]
 [0. 0. 0.]]
print('使用eye函数创建的数组为:\n',np.eye(3))#单位矩阵
使用eye函数创建的数组为:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
print('使用diag函数创建的数组为:\n',np.diag([1,2,3,4]))#对角矩阵
使用diag函数创建的数组为:
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
print('使用ones函数的数组为:\n',np.ones((5,3)))#1矩阵
使用ones函数的数组为:
 [[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
# 转换数据类型
print('转换结果为:',np.float64(10))  #整型转换为浮点型
转换结果为: 10.0
print('转换结果为:',np.int8(10.0))  #浮点型转换为整型
转换结果为: 10
print('转换结果为:',np.bool(10))  #整型转换为布尔型
转换结果为: True
print('转换结果为:',np.bool(0))  #整型转换为布尔型
转换结果为: False
print('转换结果为:',np.float(True))  #布尔型转换为浮点型
转换结果为: 1.0
print('转换结果为:',np.float(False))  #布尔型转换为浮点型
转换结果为: 0.0
# 数据类型
df = np.dtype([("name", np.str_, 40), ("numitems", np.int64),
    ("price",np.float64)])
print('数据类型为:',df)
数据类型为: [('name', '<U40'), ('numitems', '<i8'), ('price', '<f8')]
print('数据类型为:',df["numitems"])
数据类型为: int64
print('数据类型为:',np.dtype(df["numitems"]))
数据类型为: int64
# 随机数
print('生成的随机数组为:\n',np.random.random(100))#0~1之间的浮点数
生成的随机数组为:
 [8.45247163e-01 8.04961236e-01 4.61629100e-01 6.60481056e-01
 8.85688953e-01 7.92505304e-01 6.84714900e-01 6.34226585e-01
 8.20931780e-01 3.34055152e-01 7.20978384e-01 3.74890972e-01
 9.89532417e-01 4.16347259e-01 2.42102254e-01 6.61382437e-01
 4.81353414e-01 9.02105584e-01 4.02486538e-01 2.65695021e-01
 1.47966508e-01 1.14844259e-01 4.84830607e-01 6.18340708e-01
 7.76143270e-01 4.82649768e-01 9.28718489e-01 4.14964185e-01
 4.68781154e-01 1.81361248e-01 2.76627027e-01 6.39671817e-01
 6.62330659e-01 8.11416506e-01 7.77777655e-01 3.22008857e-01
 4.89123991e-01 9.29301696e-01 8.06684663e-01 9.82265016e-01
 9.13282612e-01 6.49882735e-01 2.02874844e-01 3.05527821e-01
 4.24297211e-01 4.16389231e-01 7.04391535e-01 4.99023359e-01
 5.88470538e-01 7.38298384e-01 3.68054772e-01 1.59033896e-01
 5.82120938e-01 3.71144145e-01 1.93509476e-01 6.06574724e-01
 6.11538706e-02 5.78425437e-01 7.34466790e-01 1.21817500e-01
 8.59708037e-01 4.00729070e-01 4.44967775e-01 7.27739695e-01
 2.61229858e-01 1.70732866e-01 5.96511175e-01 6.75143973e-01
 5.41266836e-01 1.83114421e-01 7.58738714e-04 4.30872768e-01
 5.20699554e-01 4.63038120e-01 5.25177320e-01 7.06495083e-01
 4.66429035e-01 6.38014308e-01 8.14504474e-02 2.70856520e-01
 9.92215242e-01 7.13024171e-01 4.94373814e-01 3.02776512e-01
 5.63768564e-01 5.89210265e-01 5.73322187e-01 4.24810060e-01
 3.66895265e-01 1.47066063e-01 9.51866724e-01 1.75349586e-01
 5.68228734e-01 9.23077343e-02 5.74306533e-01 1.15063710e-01
 1.27975927e-01 3.45100855e-01 3.49098592e-01 6.60094569e-01]
print('生成的随机数组为:\n',np.random.rand(10,5))#均匀分布
生成的随机数组为:
 [[0.25922467 0.76808373 0.63684366 0.51578544 0.53421494]
 [0.72365342 0.48093336 0.83422115 0.88113483 0.17132812]
 [0.23065314 0.94135655 0.05371515 0.44028687 0.50151535]
 [0.76408248 0.27500197 0.14867752 0.26470363 0.74286716]
 [0.33755793 0.95879839 0.15080796 0.53588816 0.78339816]
 [0.90092235 0.22243242 0.07556453 0.37230141 0.37591385]
 [0.08799716 0.08463172 0.18019147 0.63993616 0.45510651]
 [0.76824    0.11750074 0.53298314 0.35589531 0.59611092]
 [0.88556225 0.5523454  0.97087332 0.14286531 0.77582827]
 [0.11253834 0.87919561 0.21009431 0.08901257 0.35540301]]
print('生成的随机数组为:\n',np.random.randn(10,5))#标准正态分布
生成的随机数组为:
 [[ 0.53907684  0.09398254  0.08682753 -0.20524631  0.6739524 ]
 [ 0.01369997 -0.51383784 -0.10402955 -0.74558861 -0.9431707 ]
 [ 1.54475275 -0.58967622 -0.17420901  0.06108461  0.28348128]
 [ 0.20715056 -2.31514807 -0.86914422 -0.10865683 -1.03440973]
 [-0.46250783  1.2075892   0.08250644 -1.08742328 -0.78728038]
 [-1.30812596  1.35982432  1.32917884  1.15947257  0.76195138]
 [ 0.80697121  0.66593556 -0.77120651  0.01326571  0.03444282]
 [ 0.59012534 -0.09921907  0.43749378 -0.40498069  0.87905421]
 [ 0.37076441 -0.3669176  -1.81459462  2.52145125 -1.14426121]
 [-0.69042699  0.25140031  1.06545396  0.25672359  0.08348101]]
print('生成的随机数组为:\n',np.random.randint(2,10,size = [2,5]))#整数
生成的随机数组为:
 [[4 3 3 2 6]
 [5 3 4 7 7]]
#下标索引
arr = np.arange(10)
arr
Out[91]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#用整数作为下标可以获取数组中的某个元素
print('索引结果为:',arr[5])#获取下标为5的元素,python下标从0开始
索引结果为: 5
print('索引结果为:',arr[3:5])#用范围作为下标获取数组的一个切片,含前不含后,包括arr[3]不包括arr[5]
索引结果为: [3 4]
print('索引结果为:',arr[:5])  #省略开始下标,表示从arr[0]开始
索引结果为: [0 1 2 3 4]
print('索引结果为:',arr[-1])#下标可以使用负数,-1表示从数组后往前数的第一个元素
索引结果为: 9
print('索引结果为:',arr[:-1])
索引结果为: [0 1 2 3 4 5 6 7 8]
arr[2:4] = 100,101#下标还可以用来修改元素的值
print('索引结果为:',arr)  
索引结果为: [  0   1 100 101   4   5   6   7   8   9]
print('索引结果为:',arr[1:-1:2])#范围中的第三个参数表示步长,2表示隔一个元素取一个元素
索引结果为: [  1 101   5   7]
print('索引结果为:',arr[5:1:-2])  #步长为负数时,开始下标必须大于结束下标
索引结果为: [  5 101]
arr = np.array([[1, 2, 3, 4, 5],[4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
print('创建的二维数组为:\n',arr)
创建的二维数组为:
 [[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
print('索引结果为:\n',arr[0,3:5])  #索引第0行中第4和第5列的元素
索引结果为:
 [4 5]
print('索引结果为:\n',arr[1:,2:]) #索引第2和第3行中第3列、第4列和第5列的元素
索引结果为:
 [[ 6  7  8]
 [ 9 10 11]]
print('索引结果为:\n',arr[:,2])  #索引第3列的元素
索引结果为:
 [3 6 9]
print('索引结果为:',arr[[(0,1,2),(1,2,3)]]) #从两个序列的对应位置取出两个整数组成下标:arr[0,1], arr[1,2], arr[2,3]
索引结果为: [ 2  6 10]
print('索引结果为:',arr[1:,(0,2,3)]) #索引第2、3行中第1、3、4列的元素
索引结果为: [[ 4  6  7]
 [ 7  9 10]]
mask = np.array([1,0,1],dtype = np.bool)
print('索引结果为:',arr[mask,2])#mask是一个布尔数组,它索引第1、3行中第3列的元素
索引结果为: [3 9]
#数组维度
arr = np.arange(12).reshape(3,4)
print('创建的二维数组为:\n',arr)
创建的二维数组为:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
print('数组维度为:\n',arr.ndim)#数组的维度  
数组维度为:
 2
数组展平后为:
 [ 0  1  2  3  4  5  6  7  8  9 10 11]
print('数组展平后为:\n',arr.ravel())#展平
print('数组展平为:\n',arr.flatten())  #横向展平
数组展平为:
 [ 0  1  2  3  4  5  6  7  8  9 10 11]
print('数组展平为:\n',arr.flatten('F'))  #纵向展平
数组展平为:
 [ 0  4  8  1  5  9  2  6 10  3  7 11]
创建的数组1为:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
print('创建的数组1为:\n',arr1)
arr2 = arr1*3
print('创建的数组2为:',arr2)
创建的数组2为: [[ 0  3  6  9]
 [12 15 18 21]
 [24 27 30 33]]
横向组合为: [[ 0  1  2  3  0  3  6  9]
 [ 4  5  6  7 12 15 18 21]
 [ 8  9 10 11 24 27 30 33]]
print('横向组合为:',np.concatenate((arr1,arr2),axis = 1))  #concatenate函数横向组合
纵向组合为: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [ 0  3  6  9]
 [12 15 18 21]
 [24 27 30 33]]
横向组合为: [[ 0  1  2  3  0  3  6  9]
 [ 4  5  6  7 12 15 18 21]
 [ 8  9 10 11 24 27 30 33]]
print('纵向组合为:',np.concatenate((arr1,arr2),axis = 0))  #concatenate函数纵向组合
纵向组合为: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [ 0  3  6  9]
 [12 15 18 21]
 [24 27 30 33]]
arr = np.arange(16).reshape(4,4)
print('创建的二维数组为:',arr)
创建的二维数组为: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
横向分割为: [array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
print('横向分割为:',np.hsplit(arr, 2))  #hsplit函数横向分割
print('纵向分割为:',np.vsplit(arr, 2))  #vsplit函数纵向分割
纵向分割为: [array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
横向分割为: [array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
print('横向分割为:',np.split(arr, 2, axis=1))  #split函数横向分割
print('纵向分割为:',np.split(arr, 2, axis=0))  #split函数纵向分割
纵向分割为: [array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容