1.Numpy包中的广播部分:
ufunc 函数会对两个数组的对应元素计算,要求俩数组形状相同,如果不同会进行广播处理。
广播处理即所有数组的shape向维数最多数组看齐,低维通过前面加1看齐,如一维的(5,),与二维看齐后为(1,5);只有当某个轴长度相同或为1才能计算
当输入数组的某个轴长度为1时,沿此轴运算时都用第一组的值
Numpy提供了快速生成广播运算数组的ogrid对象
x,y=np.ogrid[:5,:5]
还有一个mgrid对象与此相似,但返回的是已经广播后的数组
ogrid[]内有两种写法:
始:终:步长 or 始:终:长度j
如果已经有了两个一维数组x,y:
gy,gx=np.ix_(y,x)
注意此时y是0轴,x是1轴
2.ufunc函数的方法
这些方法只对两个输入一个输出的ufunc对象有效
<op>.reduce(array,axis=0,dtype=None)
reduce()方法相当于沿着axis指定的轴对数组进行操作,将<op>运算符插入到沿axis的所有元素中:
np.add.reduce([1,2,3]) #6 np.add.reduce([[1,2,3],[4,5,6]]) #[5,7,9], 默认axis=0,same with np.add([1,2,3],[4,5,6]) np.add.reduce([[1,2,3],[4,5,6]],axis=1) #[6,15]
(在书p38-39有一些ufunc函数的表)
此外还有accumulate(),与reduce()类似,但返回和输入的数组形状相同,保存所有中间计算结果
np.add.accumulate([1,2,3]) #[1,3,6]
reduceat()计算多组reduce()结果,通过indices参数指定一系列的起始和终值位置
a=np.array([1,2,3,4]) np.add.reduceat(a,indices=[0,1,0,2,3,0]) #[1,2,3,3,6,4,10]
如果indices[i]<[i+1],则结果得到np.add.reduce(a[indices[i]:...[i+1]),不包括终值,反之得到a[indices[i]];最后一个元素由<op>.reduce(a[indices[-1]:])给出
outer()方法对两个参数数组进行组合运算,若a形状为(2,3),b(4,5),则输出数组形状为(2,3,4,5),与广播运算相似
np.multiply.outer([1,2,3,4,5],[2,3,4]) np.multily(np.array([1,2,3,4,5]).reshape(-1,1),[2,3,4]) #两者结果相同
来源:https://www.cnblogs.com/aowenli/p/7709230.html