0. np.delete()
属非更易型操作,是为了获取返回值,对原始数据不会进行修改;
from sklearn.datasets import load_iris
import numpy as np
test_idx = [0, 50, 150]
X_train, y_train = np.delete(iris.data, test_idx, axis=0), np.delete(iris.target, test_idx)
X_test, y_test = iris.data[test_idx], iris.target[test_idx]
1. 库下的全局函数
全局函数np.funcation_name()
一般属于非更易型函数
既然非更易,就需有返回值,否则函数无意义;
2. np.zeros()
>> np.zeros(())
array(0.0)
# 也即接收空参的 tuple;
np.logaddexp
numpy.logaddexp(x1, x2[, out])
也即计算log(exp(x1)+exp(x2))
如何通过logaddexp函数计算 log ( x + y ) \log(x+y) log(x+y)(如果 x ,   y x,\,y x,y都含有部分指数形式的话),
log(x+y) == np.logaddexp(np.log(x), np.log(y))
# log(exp(np.log(x))+exp(np.log(y))) == log(x+y)
np.meshgrid() 与 np.mgrid
meshgrid is very useful to evaluate functions(自然是一个关于 x , y x,y x,y 的二元函数) on a grid.(不妨将这里的grid理解为网格点,np.meshgrid的目的是生成网格点的坐标 x:-10-10, y:-10-10)
xx, yy = np.meshgrid(np.arange(-5, 5, .01), np.arange(-5, 5, .01))
zz = np.sin(xx**2+yy**2)/(xx**2+yy**2)
plt.contourf(xx, yy, zz)
plt.show()
也可以在创建网格点的坐标时,指定参数sparse为True,这样生成的 x , y x,y x,y 轴坐标个数就会显著减少,在使用二者的地方,通过numpy默认的广播机制(broadcasting)实现和dense型的坐标等价的功能。
>>> x, y = np.meshgrid(range(5), range(5), sparse=True)
>>> x
array([[0, 1, 2, 3, 4]])
# x.shape = (1, 5)
# 广播时拷贝扩展5行
>>> y
array([[0],
[1],
[2],
[3],
[4]])
# y.shape = (5, 1)
# 广播时拷贝拓展5列
np.mgrid是np.meshgrid()的convenient version,np.mgrid不是函数。
注意切片的用法是:start?step
>>> np.mgird[0:3, 0:3]
# 步长为1
# 不包含3,
array([[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]])
>>> np.mgrid[-1:1:5j]
# 步长为复数时,
# 实数部分为元素的个数
# stop value is inclusive
array([-1. , -0.5, 0. , 0.5, 1. ])
# (1-(-1))/(5-1)=.5
np.clip()
np.clip()
的数学本质是一种截断;
考虑如下的分段函数:
f
(
x
)
=
{
5
,
for
x
>
5
x
,
for
∣
x
∣
≤
5
−
5
,
for
x
<
−
5
f(x)=\left\{ \begin{array}{ll} 5,&\textrm{for }x>5\\ x,&\textrm{for }|x|\leq5\\ -5,&\textrm{for }x<-5 \end{array} \right.
f(x)=⎩⎨⎧5,x,−5,for x>5for ∣x∣≤5for x<−5
plt.plot(x, np.clip(x, -5, 5), 'g', lw=2)