此部分主要是学习过程中的一些函数笔记.
Where函数

然而看的没怎么明白。
numpy.where() 有两种用法:
np.where(condition, x, y)满足条件(condition),输出x,不满足输出y。np.where(condition)只有条件(condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
看到知乎回答的图示非常清晰,如下
第一种用法的图示:
输出位置的对应如下:

同理:

第二种用法的图示:
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。即是第一组为第一维度的坐标,依次对应,每列对应一个元素完整的坐标,如下:
即有:

numpy.random.multinomial函数

这是 numpy 提供的随机二项式分布实现,二项式分布(binomial distribution)如下表示:
函数原型如下:
numpy.random.RandomState.binomial(n, p, size=None)
表示对一个二项分布进行采样,size表示采样的次数,参数中的n, p分别对应于公式中的,函数的返回值表示n中成功(success)的次数(也即)。
举个例子,比如掷骰子,一共3个硬币,每个都投一次,三个都是正面朝上的概率是多少?
这个使用简单的概率统计知识很容易计算得到:
使用上述函数计算大概值则是做足够多次的试验,统计其中全为正面朝上的概率,通过频率计算概率,如下:

numpy中矩阵乘法,星乘(*)和点乘(.dot)的区别
import numpy
a = numpy.array([[1,2],
[3,4]])
b = numpy.array([[5,6],
[7,8]])
计算结果
a*b
>>>array([[ 5, 12],
[21, 32]])
a.dot(b)
>>>array([[19, 22],
[43, 50]])
numpy.dot(a,b)
>>>array([[19, 22],
[43, 50]])
numpy.dot(b,a)
>>>array([[23, 34],
[31, 46]])
星乘表示矩阵内各对应位置相乘,保证矩阵size 相同。 点乘表示求矩阵内积,遵循矩阵乘法的规则。
meshgrid() 方法
这个方法从坐标向量返回坐标矩阵。在很多地方都有应用,例如生成等高线图的数据集。
借用一张图显示:

可以看到,meshgrid()方法接受两个一维向量,生成一个坐标矩阵。
比如在画himmelblau可视化的时候可以用这个方法:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def himmelblau(x):
return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2
x = np.arange(-6, 6, 0.1)
y = np.arange(-6, 6, 0.1)
X, Y = np.meshgrid(x, y)
Z = himmelblau([X, Y])
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, cmap='rainbow')
ax.set_xlabel('x[0]')
ax.set_ylabel('x[1]')
plt.show()
结果如下:
