Python<Numpy常见用法>

来源:互联网 发布:淘宝卖家退款流程 编辑:程序博客网 时间:2024/06/07 00:32

1.基本数据类型
这里写图片描述

2.修改shape

In [18]: y=np.arange(2*3*4)In [19]: yOut[19]: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])In [20]: y.shape=(3,8)In [21]: yOut[21]: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]])In [22]: y.shape=(2,3,4)In [23]: yOut[23]: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]]])

3.itemsize查看数据类型在内存中占用的字节数

In [36]: a=np.array(5,dtype=np.float)In [37]: aOut[37]: array(5.0)In [38]: a.dtypeOut[38]: dtype('float64')In [39]: a.dtype.itemsizeOut[39]: 8In [40]: a=np.array(5,dtype=np.float16)In [41]: a.dtype.itemsizeOut[41]: 2

4.切片索引固定步长选择元素

In [46]: a[:7:2]Out[46]: array([0, 2, 4, 6])In [47]: a[:7:3]Out[47]: array([0, 3, 6])In [48]: a=np.arange(9)In [49]: a[:7:2]Out[49]: array([0, 2, 4, 6])In [50]: a[:7:3]Out[50]: array([0, 3, 6])

5.指定间隔翻转数组

In [46]: a[:7:2]Out[46]: array([0, 2, 4, 6])In [47]: a[:7:3]Out[47]: array([0, 3, 6])In [48]: a=np.arange(9)In [49]: a[:7:2]Out[49]: array([0, 2, 4, 6])In [50]: a[:7:3]Out[50]: array([0, 3, 6])

6.选取N维数组中的指定元素

In [55]: b=np.arange(24).reshape(2,3,4)In [56]: bOut[56]: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]]])In [57]: b[0]Out[57]:array([[ 0,  1,  2,  3],       [ 4,  5,  6,  7],       [ 8,  9, 10, 11]])In [58]: b[:,0]Out[58]:array([[ 0,  1,  2,  3],       [12, 13, 14, 15]])In [59]: b[:,:,0]Out[59]:array([[ 0,  4,  8],       [12, 16, 20]])#另外一种方法In [60]: b[...,0]Out[60]:array([[ 0,  4,  8],       [12, 16, 20]])

7.改变数组的维度

In [61]: bOut[61]: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]]])#返回一个原数组的viewIn [62]: b.ravel()Out[62]: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])In [63]: bOut[63]: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]]])#flatten()重新申请内存保存结果In [64]: b.flatten()Out[64]: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])In [65]: bOut[65]: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]]])In [66]: b.shape=(4,6)In [67]: bOut[67]: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]])

8.数组转置

In [70]: b.TOut[70]:array([[ 0,  6, 12, 18],       [ 1,  7, 13, 19],       [ 2,  8, 14, 20],       [ 3,  9, 15, 21],       [ 4, 10, 16, 22],       [ 5, 11, 17, 23]])In [71]: b.transpose()Out[71]:array([[ 0,  6, 12, 18],       [ 1,  7, 13, 19],       [ 2,  8, 14, 20],       [ 3,  9, 15, 21],       [ 4, 10, 16, 22],       [ 5, 11, 17, 23]])

9.reshape和resize
后者直接修改源数组

In [75]: b.reshape(2,3,4)Out[75]: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]]])In [76]: bOut[76]: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]])In [77]: b.resize(2,3,4)In [78]: bOut[78]: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]]])

10.数组组合

水平组合

这里写图片描述

In [14]: aOut[14]:array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])In [15]: bOut[15]:array([[ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])In [16]: np.hstack((a,b))Out[16]:array([[ 0,  1,  2,  0,  2,  4],       [ 3,  4,  5,  6,  8, 10],       [ 6,  7,  8, 12, 14, 16]])In [17]: np.concatenate((a,b),axis=1)Out[17]:array([[ 0,  1,  2,  0,  2,  4],       [ 3,  4,  5,  6,  8, 10],       [ 6,  7,  8, 12, 14, 16]])

concatenate的axis的要么是0要么是1,前者竖向组合,后者水平组合

垂直组合

In [18]: np.vstack((a,b))Out[18]:array([[ 0,  1,  2],       [ 3,  4,  5],       [ 6,  7,  8],       [ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])In [20]: np.concatenate((a,b),axis=0)Out[20]:array([[ 0,  1,  2],       [ 3,  4,  5],       [ 6,  7,  8],       [ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])

深度组合

In [24]: aOut[24]:array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])In [25]: bOut[25]:array([[ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])In [26]: np.dstack((a,b))Out[26]:array([[[ 0,  0],        [ 1,  2],        [ 2,  4]],       [[ 3,  6],        [ 4,  8],        [ 5, 10]],       [[ 6, 12],        [ 7, 14],        [ 8, 16]]])

还可以这么玩:

In [38]: a=np.arange(10)In [39]: b=a*3In [40]: bOut[40]: array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])In [41]: np.stack((a,b),axis=0)Out[41]:array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],       [ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27]])In [42]: np.stack((a,b),axis=1)Out[42]:array([[ 0,  0],       [ 1,  3],       [ 2,  6],       [ 3,  9],       [ 4, 12],       [ 5, 15],       [ 6, 18],       [ 7, 21],       [ 8, 24],       [ 9, 27]])

行组合:

In [43]: aOut[43]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])In [44]: bOut[44]: array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27])In [45]: np.column_stack((a,b))Out[45]:array([[ 0,  0],       [ 1,  3],       [ 2,  6],       [ 3,  9],       [ 4, 12],       [ 5, 15],       [ 6, 18],       [ 7, 21],       [ 8, 24],       [ 9, 27]])In [48]: a=np.arange(9).reshape(3,3)In [49]: aOut[49]:array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])In [50]: b=a*2In [51]: bOut[51]:array([[ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])In [52]: np.column_stack((a,b))Out[52]:array([[ 0,  1,  2,  0,  2,  4],       [ 3,  4,  5,  6,  8, 10],       [ 6,  7,  8, 12, 14, 16]])In [56]: np.column_stack((a,b))==np.hstack((a,b))Out[56]:array([[ True,  True,  True,  True,  True,  True],       [ True,  True,  True,  True,  True,  True],       [ True,  True,  True,  True,  True,  True]], dtype=bool)

行组合

In [57]: np.row_stack((a,b))Out[57]:array([[ 0,  1,  2],       [ 3,  4,  5],       [ 6,  7,  8],       [ 0,  2,  4],       [ 6,  8, 10],       [12, 14, 16]])In [58]: np.row_stack((a,b))==np.vstack((a,b))Out[58]:array([[ True,  True,  True],       [ True,  True,  True],       [ True,  True,  True],       [ True,  True,  True],       [ True,  True,  True],       [ True,  True,  True]], dtype=bool)

11.数组切割

In [61]: aOut[61]:array([[0, 1, 2],       [3, 4, 5],       [6, 7, 8]])In [62]: np.hsplit(a,3)Out[62]:[array([[0],        [3],        [6]]),  array([[1],        [4],        [7]]), array([[2],        [5],        [8]])]

垂直切割:

In [67]: np.vsplit(a,3)Out[67]: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

深度切割

In [70]: cOut[70]: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, 25, 26]]])In [71]: np.dsplit(c,3)Out[71]:[array([[[ 0],         [ 3],         [ 6]],        [[ 9],         [12],         [15]],        [[18],         [21],         [24]]]), array([[[ 1],         [ 4],         [ 7]],        [[10],         [13],         [16]],        [[19],         [22],         [25]]]), array([[[ 2],         [ 5],         [ 8]],        [[11],         [14],         [17]],        [[20],         [23],         [26]]])]

12.数组属性
ndim属性,给出数组的维数,或数组轴的个数:

In: bOut: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]])In: b.ndimOut: 2

size属性,给出数组元素的总个数,如下所示:

In: b.sizeOut: 24

itemsize属性,给出数组中的元素在内存中所占的字节数:

In: b.itemsizeOut: 8

如果你想知道整个数组所占的存储空间,可以用nbytes属性来查看。这个属性的值其实
就是itemsize和size属性值的乘积:

In: b.nbytesOut: 192In: b.size * b.itemsizeOut: 192 

13.读取CSV文件

#!/usr/bin/python# coding=UTF-8import numpy as np#读取整个文件夹的内容delimiter指定文件中的分隔符,dtype指定类型content=np.loadtxt('data.csv', delimiter=',',dtype=str)print contentprint '第一行第一个元素:'print content[0][0]#读取指定列,unpack参数设置为True,意思是分拆存储不同列的数据one,two=np.loadtxt('data.csv',delimiter=',',dtype=str,usecols=(0,1),unpack=True)print one,twoprint one[0]#读取整个文件夹的内容delimiter指定文件中的分隔符,dtype指定类型content=np.genfromtxt('data.csv',delimiter=',',dtype=str)print contentone,two=np.genfromtxt('data.csv',delimiter=',',usecols=(0,1),unpack=True,dtype=str)print one,two
原创粉丝点击