numpy 用法

numpy 是python的一个矩阵类型,提供了大量矩阵处理的函数。运行速度快,内部用c语言实现。

包含两种基本类型:数组和矩阵
1.数组
多维数组的类型是:numpy.ndarray。

使用numpy.array方法创建

import numpy as np
p=np.array([1,2,3,4])
# np.array((1,2,3,4))  等价
print type(p)
# 
print np.shape(p)
# (4,) 获取数组的形状维度
print pp*2
#每个元素乘2
print pp**2
# 元素平方
# 多维数组
p1=np.array([[1,2,3],[4,5,6]])
print np.shape(p1)
# (2, 3)
# 支持多维访问
print p1[0]
#[1 2 3]
print p1[0][0]
# 1
print p1[0,0]
#也支持类似矩阵的访问,结果为1,和p1[0][0] 相同
# 当把两个数组乘起来时,是对应元素相乘
print p1[0]*p1[1]
#[ 4 10 18]

# 在array数组中,* 代表对应元素相乘

详细可见: http://www.jb51.net/article/49397.htm

  1. 矩阵
#把列表转成矩阵
pp=np.mat(p)
print pp
# [[1 2 3 4]]
print np.shape(pp)
# (1, 4) 转成mat,维度从 (4,) 变成了 (1, 4)
# 矩阵相乘
print pp*p
print pp*pp
## 运行均出错,维度不匹配
## 在matrix 矩阵中,* 代表矩阵相乘,必须保证维度合理

## 如果要进行对应元素相乘的操作
print np.multiply(pp,pp)  
print np.multiply(pp,p)
# [[ 1  4  9 16]]

print pp.T *p
#[[ 1  2  3  4]
# [ 2  4  6  8]
# [ 3  6  9 12]
# [ 4  8 12 16]]
print pp *pp.T
# [[30]]
print pp*p.T
# 运行出错,p.T的维度依然是 (4,) 和p 一样
# 尤其要注意 

print pp.sort()
# 原地排序
print pp.argsort()
# 返回每个元素的排序索引
print np.mean(pp)
# 计算均值

# 矩阵切片
p1=np.array([[1,2,3],[4,5,6]])
print np.mat(p1)
print p1[1,1:]
# [5 6]

3.易混淆点

import numpy as np

a=np.array([[1,2,3],[4,5,6]])

c1=np.array([[1],[1],[1]])
c2=np.array([1,1,1])
##遇到这样的向量要注意,向量
print np.mat(c2)
# [[1 1 1]]

c3=np.array([[1,1,1]])

print np.shape(a)
# (2, 3)
print np.shape(c1)
#(3, 1)
print np.shape(c2)
#(3,)
print np.shape(c3)
#(1, 3)

print np.dot(a,c1)
print np.mat(a)*np.mat(c1)
#上面两个结果一样
#[[ 6]
# [15]]

print a*c1
#出错

print np.dot(a,c2)
# [ 6 15]
# 维度(2,3) (3,) 可以相乘,对于数组来说

print np.dot(a,c3)
# 均出错

发现第三点的易混淆,已经有一篇很棒的博客了
很赞,http://blog.csdn.net/iamzhangzhuping/article/details/52370241

对于matrix,* 和 dot都表示矩阵相乘,必须遵守矩阵相乘法则
对于array,* 代表对应元素相乘,dot代表类似于矩阵相乘,但是并不要求操作数像矩阵相乘的要求那么严格,相乘的结果的格式也不是矩阵,而是数组, 例如 print np.dot(a,c2),代码31行

你可能感兴趣的:(python,基础)