1.numpy 数据类型
bool:布尔类型,1 个字节,值为 True 或 False。
int:整数类型,通常为 int64 或 int32 。
intc:与 C 里的 int 相同,通常为 int32 或 int64。
intp:用于索引,通常为 int32 或 int64。
int8:字节(从 -arange128 到 127)
int16:整数(从 -32768 到 32767)
int32:整数(从 -2147483648 到 2147483647)
int64:整数(从 -9223372036854775808 到 9223372036854775807)
uint8:无符号整数(从 0 到 255)
uint16:无符号整数(从 0 到 65535)
uint32:无符号整数(从 0 到 4294967295)
uint64:无符号整数(从 0 到 18446744073709551615)
float:float64 的简写。
float16:半精度浮点,5 位指数,10 位尾数
float32:单精度浮点,8 位指数,23 位尾数
float64:双精度浮点,11 位指数,52 位尾数
complex:complex128 的简写。
complex64:复数,由两个 32 位浮点表示。
complex128:复数,由两个 64 位浮点表示。
可以在创建arrray时,使用dtype 来指定它的数据类型, 对array 对象使用dtype 查看数据类型
2. ndarry(N维数组对象)
创建
使用array() 函数, 可以使用dtype 来指定类型
zeros() 函数来生成, 元素均为0 的数组
ones() 函数生成元素都为0 的数组
arange(start, stop,step,dtype) 函数来创建
n>>> np.arange(0,12).reshape(3,4)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
linspace(start, end, num) num: 生成的样本数,也就是指定由开头到结尾所指定的范围分成几个部分
>>> np.linspace(0,12,3)
array([ 0., 6., 12.])
也可以使用random.random(shape) 来用随机数填充数组
>>> np.random.random((3,4))
array([[ 0.42793958, 0.7801106 , 0.40430299, 0.2440989 ],
[ 0.12988871, 0.01634131, 0.62752135, 0.99287802],
[ 0.95552834, 0.60075408, 0.48059998, 0.6966276 ]])
ndarry 数组的属性
ndim 秩的数量
size 数组的大小
shape 数组的型
3.基本操作
重新设置形状
>>> np.arange(0,12).reshape((3,4))
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
算术运算
直接使用算术运算符进行运算
矩阵积: dot(A,B) 或A.dot(B), 矩阵不遵循交换律
通用函数: sqrt(), log() , sin(), ...
聚合函数
min()
max()
sum()
mean() 平均数
std()
索引
跟列表有些类似
>>> a=np.arange(20).reshape(4,5)
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
>>> a[[3,4],[3,4]]
实际获取的是[1,3],也就是第2行和第4列对于的值8。以及[2, 4],也就是第3行和第5列对于的值14。
三维数组
>>>importnumpyasnp>>>a = np.arange(30).reshape(2,5,3)>>>a
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],
[27,28,29]]])# 索引>>>a[[0,1],[1,2],[1,2]]
array([4,23])
这里,[0,1]分布代表axis = 0和axis = 1。而,后面的[1,2],[1,2]分别选择了第2行第2列和第3行第3列的两个数。
切片
对于多维数组,我们只需要用逗号,分割不同维度即可:
>>>a = np.arange(20).reshape(4,5)>>>a
array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14],
[15,16,17,18,19]])# 先取第 3,4 列(第一个维度),再取第 1,2,3 行(第二个维度)。>>>a[0:3,2:4]
array([[2,3],
[7,8],
[12,13]])# 按步长为 2 取所有列和所有行的数据。>>>a[:,::2]
array([[0,2,4],
[5,7,9],
[10,12,14],
[15,17,19]])
数组迭代
遍历矩阵的每个元素
for item in A:
print item
apply_along_axis() 函数, axis =0, 时,为沿行,=1时,沿列
>>> np.apply_along_axis(np.mean, axis=0, arr=A)
array([ 0.31892036, 0.32059507, 0.5275357 , 0.56294685])
>>> np.apply_along_axis(np.mean, axis=1, arr=A)
array([ 0.34725639, 0.52172109, 0.428521 ])
>>> A
array([[ 0.37854916, 0.07013463, 0.16762009, 0.77272168],
[ 0.39064676, 0.79229944, 0.57201198, 0.33192621],
[ 0.18756517, 0.09935115, 0.84297504, 0.58419266]])
条件和布尔数组
>>> A = np.random.random((4,4))
>>> A
array([[ 0.73033594, 0.95318457, 0.05115813, 0.1413278 ],
[ 0.38830897, 0.67513952, 0.73892551, 0.00472255],
[ 0.52383481, 0.35105734, 0.61480131, 0.00726216],
[ 0.28354593, 0.15196966, 0.86462789, 0.86654137]])
>>> A<0.5
array([[False, False, True, True],
[ True, False, False, True],
[False, True, False, True],
[ True, True, False, False]], dtype=bool)
>>> A[A<0.5]
array([ 0.05115813, 0.1413278 , 0.38830897, 0.00472255, 0.35105734,
0.00726216, 0.28354593, 0.15196966])
形状变换
reshape() 函数
ravel () 函数将二维数组变成一维数组
transpose() 交换行列
数组操作
vstack() 垂直入栈操作
hstack() 水平入栈操作
数组切分
hsplit() 水平分割
vsplit() 垂直分割
>>> A = np.arange(0,12).reshape(3,4)
>>> A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> [b,c]= np.hsplit(A,2)
>>> b
array([[0, 1],
[4, 5],
[8, 9]])
>>> c
array([[ 2, 3],
[ 6, 7],
[10, 11]])
也可以指定axis 沿哪条轴分割
对象的副本
直接使用copy() 函数
>>> a
array([[ 0.93582073, 0.36285637, 0.1743055 , 0.73572584],
[ 0.57430482, 0.86607796, 0.73776101, 0.12266299],
[ 0.59001065, 0.38222194, 0.06113438, 0.01316895]])
>>> b=a.copy()
>>> b
array([[ 0.93582073, 0.36285637, 0.1743055 , 0.73572584],
[ 0.57430482, 0.86607796, 0.73776101, 0.12266299],
[ 0.59001065, 0.38222194, 0.06113438, 0.01316895]])
结构化数组
创建一个简单的结构化数组
>>> structured = np.array([(1,'first', 0.5, 1+2j), (2, 'second', 1.5, 2+2j)], dtype=('int16,a6,float32, complex64'))>>> structuredarray([(1, 'first', 0.5, 1.+2.j), (2, 'second', 1.5, 2.+2.j)], dtype=[('f0', '>> structured[1]
(2, 'second', 1.5, 2.+2.j)
数据文件读入
保存
>>> a
array([[ 0.93582073, 0.36285637, 0.1743055 , 0.73572584],
[ 0.57430482, 0.86607796, 0.73776101, 0.12266299],
[ 0.59001065, 0.38222194, 0.06113438, 0.01316895]])
>>> np.save('a_data',a)
np.load('a_data.npy‘)
读取文件中列表形式
CSV
np.getfromtxt('data.csv', delimiter=',', names=True) , (打开的文件名, 分隔符, 是否保存列标题) ,内容为空的项填充为nan 值