ndarray 多维数组对象
创建ndarray
data1 = [6 , 7.5 , 8 , 0 , 1 ]
arr1 = np.array(data1)
data2 = [[1 ,2 ,3 ,4 ],[5 ,6 ,7 ,8 ]]
arr2 = np.array(data2)
np.zeros(10 )
np.zeros((3 ,6 ))
np.empty((2 ,3 ,2 ))
np.arange(15 )
...
ndarray的数据类型
arr1 = np.array ([1 ,2 ,3 ], dtype=np.float64)
arr2 = np.array ([1 ,2 ,3 ], dtype=np.int32)
arr = np.array ([1 ,2 ,3 ,4 ,5 ,6 ])
arr.dtype
float_arr = arr.astype(np.float64)
num_strings = np.array (['1.25' ,'-9.6' ,'42' ],dtype=np.string_)
num_strings.astype(float)
数组和标量之间的运算
arr = np.array([[1 ,2 ,3 ],[4 ,5 ,6 ]])
arr_pow = arr*arr
1 /arr
arr*0.5
基本的索引和切片
arr = np.array(10 )
arr[5 ]
arr[5 :8 ]
arr[5 :8 ] = 12
arr_slice = arr[5 :8 ]
arr_slice[1 ] = 12345
arr[5 :8 ].copy()
arr2d = np.array([[1 ,2 ,3 ],[4 ,5 ,6 ],[7 ,8 ,9 ]])
arr2d[2 ]
arr2d[0 ][2 ] <=> arr2d[0 ,2 ]
arr3d = np.array([[[1 ,2 ,3 ],[4 ,5 ,6 ]],[[7 ,8 ,9 ],[10 ,11 ,12 ]]])
old_values = arr3d[0 ]
arr3d[0 ] = 24
arr3d[0 ] = old_values
arr3d[1 ,0 ]
arr2d[:,0 ]
arr2d[:,:1 ]
布尔索引
names = np.array(['Bob' , 'Joe' , 'Will' , 'Bob' , 'Will' , 'Joe' , 'Jow' ])
data = randn(7 ,4 )
data[names == 'Bob' ]
data[(names == 'Bob' ) | (names == 'Will' )]
data[data < 0 ] = 0
data[names != 'Joe' ] = 7
花式索引
arr= np.empty((8 ,4 ))
for i in range(8 ):
arr[i] = i
arr[[4 ,3 ,0 ,6 ]]
arr = np.arange(32 ).reshape((8 , 4 ))
arr[[1 ,5 ,7 ,2 ], [0 ,3 ,1 ,2 ]]
arr[[1 ,5 ,7 ,2 ]][:,[0 ,3 ,1 ,2 ]]
arr[np.ix_([1 ,5 ,7 ,2 ],[0 ,3 ,1 ,2 ])]
数组转置和轴对换
arr = np.arange(15 ).reshape((3 ,5 ))
arr.T
arr = np.arange(16 ).reshape((2 ,2 ,4 ))
arr.transpose((1 ,0 ,2 ))
arr.swapaxes(1 ,2 )
通用函数
arr = np.arange(10 )
np.sqrt(arr)
np.exp(arr)
x = randn(8 )
y = randn(8 )
np.maximum(x, y)
...
利用数组进行数据处理
import matplotlib.pyplot as plt
points = np.arange(-5 ,5 ,0.01 )
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs**2 + ys**2 )
plt.imshow(z, cmap=plt.cm.gray);plt.colorbar()
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values" )
plt.show()
将条件逻辑表述为数组运算
xarr = np.array([1.0 ,1.2 ,1.3 ,1.4 ,1.5 ])
yarr = np.array([2.1 ,2.2 ,2.3 ,2.4 ,2.5 ])
cond = np.array([True , False , True , True , False ])
result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)]
result = np.where(cond, xarr, yarr)
arr = randn(4 , 4 )
np.where(arr>0 , 2 , -2 )
np.where(arr>0 , 2 , arr)
数学和统计方法
arr = np.random.randn(5 ,4 )
arr.mean()
np.mean(arr)
arr.sum()
arr.mean(axis = 1 )
arr.cumsum()
arr.cumprod()
用于布尔数组的方法
arr = randn(100 )
(arr>0 ).sum()
bools = np.array([False , False , True , False ])
bools.any()
bools.all()
排序
arr = randn(8 )
arr.sort()
arr = randn(5 , 3 )
arr.sort(1 )
large_arr = randn(1000 )
large_arr.sort()
large_arr[int(0.05 * len(large_arr))]
唯一化以及其他的集合逻辑
names = np.array(['Bob' ,'Joe' ,'Will' ,'Bob' ,'Will' ,'Joe' ,'Joe' ])
np.unique(names)
values = np.array([6 ,0 ,0 ,3 ,2 ,5 ,6 ])
np.in1d(values, [2 ,3 ,6 ])
intersect1d
union1d
setdiff1d
setxorf1d
用于数组文件的输入输出
将数组以二进制格式保存到磁盘
arr = np.arange(10 )
np.save('some_array' , arr)
np.load('some_array' )
np.savez('array_achive.npz' , a=arr, b=arr)
arch = np.load('array_achive.npz' )
arch['b' ]
存取文本文件
arr = np.loadtxt('array_ex.txt' , delimiter=',' )
np.savetxt('arr' , arr, delimiter=',' )
线性代数
x = np.array([[1 ,2 ,3 ],[4 ,5 ,6 ]])
y = np.array([[6 ,23 ],[-1 ,7 ],[8 ,9 ]])
x.dot(y)
np.dot(x, y)
from numpy.linalg import inv qr
x = randn(5 ,5 )
mat = X.T.dot(X)
inv(mat)
mat.dot(inv(mat))
q, r = qr(mat)
随机数生成
samples = np.random.normal(size=(4 ,4 ))
seed
permutation
shuffle
rand
randint
randn
binomial
normal
beta
chisquare
uniform
随机漫步
import random
position = 0
walk = [position]
steps = 1000
for i in xrange(steps):
step = 1 if random.randint(0 ,1 ) else -1
position += step
walk.append(position)
import numpy as np
nsteps = 1000
draws = np.random.randint(0 , 2 , size=nsteps)
steps = np.where(draws>0 , 1 , -1 )
walk = steps.cumsum()
(np.abs(walk) >= 10 ).argmax()
nwalks = 5000
nsteps = 1000
draws = np.random.randint(0 ,2 ,size=(nwalks, nsteps))
steps = np.where(draws>0 , 1 , -1 )
walks = steps.cumsum(1 )
walks.max()
walks.min()
hist30 = (np.abs(walks) >= 30 ).any(1 )
hist30.sum()
crossing_times = (np.abs(walks[hist30]) >= 30 ).argmax(1 )
crossing_times.mean()