基础
不同类型存储
# define a new dtype
from numpy import *
t = dtype([('name',str_,40),('numitems',int32),('price',float32)])
In [9]: t
Out[9]: dtype([('name', 'S40'), ('numitems', '<i4'), ('price', '<f4')])
itemz = array([('Meaning of life DVD',42,3.14),('2',2,2)],dtype=t)
In [13]: itemz
Out[13]:
array([('Meaning of life DVD', 42, 3.140000104904175), ('2', 2, 2.0)],
dtype=[('name', 'S40'), ('numitems', '<i4'), ('price', '<f4')])
数组组合
1. 水平组合: hstack((a,b))
2. 垂直组合: vstack((a,b))
3. 深度组合: dstack
4. 列组合: column_stack((a,b))
5. 行组合: row_stack((a,b))
对于二维数组1,4是相同的
分割
hsplit、vsplit、dsplit 和split
数组的属性
ndim: 数组维数
size: 元素个数
itemsize: 每个元素占内存数
nbytes: 整个数组所占的空间
T:转置
flat: 返回迭代对象
数组的转换
tolist() 转换成列表
astype() 转换数据类型
常用函数
io
np.savetxt("name", data)
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)
usecols 表示获取6,7字段的数据
#设置存储格式
np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s")
如代码中所示,我们指定了文件名、需要保存的数组名、分隔符(在这个例子中为英文标点逗号)以及存储浮点数的格式.
格式字符串以一个百分号开始。接下来是一个可选的标志字符:- 表示结果左对齐,0 表示左端补0,+表示输出符号(正号+或负号-)。第三部分为可选的输出宽度参数,表示输出的最小位数。第四部分是精度格式符,以"."开头,后面跟一个表示精度的整数。最后是一个类型指定字符,在我们的例子中指定为字符串类型。
def datestr2num(s):
return datetime.datetime.strptime
(s, "%d-%m-%Y").date().weekday()
# 加入对某一列的转换converters
dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:
datestr2num}, unpack=True)
计算
average,max,min,ptp(极差),median,var,mean,diff.log,where,
apply
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
# 对每一行进行操作
np.apply_along_axis(np.mean,1,a)
array([ 2., 5., 8.])
#书中例子
def summarize(a, o, h, l, c):
monday_open = o[a[0]]
week_high = np.max( np.take(h, a) )
week_low = np.min( np.take(l, a) )
friday_close = c[a[-1]]
return("APPL", monday_open, week_high, week_low, # apply 可以多个数据集一起使用,传参
weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)
print "Week summary", weeksummary
矩阵操作
np.mat('1 2 3; 4 5 6; 7 8 9')
#构造一个与a相同形状的0矩阵
np.zeros_like(a)
线性代数
#求逆
np.linalg.inv(A)
#求解线性方程组
np.linalg.solve(A,b)
#广义逆
np.pinv(A)
#行列式
np.linalg.det(A)
搜索index
np.argmax()
np.nanargmax([np.nan,2,4]) # 忽略nan的最大值位置
np.argwhere(a <= 4) #
# 按照排序 顺序插入
np.searchsorted(a,[-2,7])
# 输出对应角标的元素
np.extract(condition, a)
matplot
import numpy as np
import matplotlib.pyplot as plt
func = np.poly1d(np.array([1, 2, 3, 4]).astype(float))
x = np.linspace(-10, 10, 30)
y = func(x)
func1 = func.deriv(m=1)
y1 = func1(x)
func2 = func.deriv(m=2)
y2 = func2(x)
plt.subplot(311)
plt.plot(x, y, 'r-' )
plt.title("Polynomial")
plt.subplot(312)
plt.plot(x, y1, 'b^')
plt.title("First Derivative")
plt.subplot(313)
plt.plot(x, y2, 'go')
plt.title("Second Derivative")
plt.xlabel('x')
plt.ylabel('y')
plt.show()
hist
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
plt.hist(np.arange(10),3)
plt.show()
对数坐标图
plt.semilogy(dates, volume)