1.基本数据类型
2.修改shape
In [18]: y=np.arange(2*3*4)
In [19]: y
Out[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]: y
Out[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]: y
Out[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]: a
Out[37]: array(5.0)
In [38]: a.dtype
Out[38]: dtype('float64')
In [39]: a.dtype.itemsize
Out[39]: 8
In [40]: a=np.array(5,dtype=np.float16)
In [41]: a.dtype.itemsize
Out[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]: b
Out[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]: b
Out[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]]])
#返回一个原数组的view
In [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]: b
Out[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]: b
Out[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]: b
Out[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.T
Out[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]: b
Out[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]: b
Out[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]: a
Out[14]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [15]: b
Out[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]: a
Out[24]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [25]: b
Out[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*3
In [40]: b
Out[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]: a
Out[43]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [44]: b
Out[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]: a
Out[49]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [50]: b=a*2
In [51]: b
Out[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]: a
Out[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]: c
Out[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: b
Out:
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.ndim
Out: 2
size属性,给出数组元素的总个数,如下所示:
In: b.size
Out: 24
itemsize属性,给出数组中的元素在内存中所占的字节数:
In: b.itemsize
Out: 8
如果你想知道整个数组所占的存储空间,可以用nbytes属性来查看。这个属性的值其实
就是itemsize和size属性值的乘积:
In: b.nbytes
Out: 192
In: b.size * b.itemsize
Out: 192
13.读取CSV文件
#!/usr/bin/python
# coding=UTF-8
import numpy as np
#读取整个文件夹的内容delimiter指定文件中的分隔符,dtype指定类型
content=np.loadtxt('data.csv', delimiter=',',dtype=str)
print content
print '第一行第一个元素:'
print content[0][0]
#读取指定列,unpack参数设置为True,意思是分拆存储不同列的数据
one,two=np.loadtxt('data.csv',delimiter=',',dtype=str,usecols=(0,1),unpack=True)
print one,two
print one[0]
#读取整个文件夹的内容delimiter指定文件中的分隔符,dtype指定类型
content=np.genfromtxt('data.csv',delimiter=',',dtype=str)
print content
one,two=np.genfromtxt('data.csv',delimiter=',',usecols=(0,1),unpack=True,dtype=str)
print one,two