python中的科学计算(1)

来源:互联网 发布:日上免税店mac报价 编辑:程序博客网 时间:2024/05/16 21:15

1,广播:对 形状不同 的数组的运算采取的操作。但是这个输入的数组中必须有一个 某轴长度为1,或者缺 少了一个维度(这个时候会自动的在shape属性前面补上1)。例如:

import numpy as np
a=np.arange(10,50,10).reshape(-1,1)
a.shape
(4, 1)
b=np.arange(0,4)
b
array([0, 1, 2, 3])
b.shape
(4,)
a+b
array([[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])

2,内积:np.dot(a,b) 就可以来计算a,b的内积,同样的np.inner(a,b)也可以,但是它要求最后一维度是要相同的,np.outer(a,b)则是将数组 展平为一维数组 再进行计算。

3,求和,平均值,方差:比较简单,分别是np.sum(), np.mean(), np.var(), np.std()(这个是标准差),关键是在加入axis参数以后要很好的区分;看下面的例子应该就比较清楚了:

求和:

a
array([[6, 7, 1, 6],
[1, 0, 2, 3],
[7, 8, 2, 1]])
np.sum(a)
44
np.sum(a,axis= 0 )
array([14, 15, 5, 10])
np.sum(a,axis= 1 )
array([20, 6, 18])
np.sum(a,axis= -1 )

均值:

a
array([[6, 7, 1, 6],
[1, 0, 2, 3],
[7, 8, 2, 1]])
np.mean(a)
3.6666666666666665
np.mean(a,axis=0)
array([ 4.66666667, 5. , 1.66666667, 3.33333333])

方差:

np.var(a)

7.7222222222222223

np.var(a,axis=0)
array([ 6.88888889, 12.66666667, 0.22222222, 4.22222222])
np.std(a,axis=0)
array([ 2.62466929, 3.55902608, 0.47140452, 2.05480467])
4,最值和排序:最值有np.max(),np.min() 他们都有axis和out(输出)参数, 而通过np.argmax(), np.argmin()可以得到取得最大或最小值时的 下标。排序通过np.sort(), 而np.argsort()得到的是排序后的数据原来位置的下标。

a
array([[6, 7, 1, 6],
[1, 0, 2, 3],
[7, 8, 2, 1]])
a.sort()
a
array([[1, 6, 6, 7],
[0, 1, 2, 3],
[1, 2, 7, 8]])
np.sort(a,axis=0)
array([[0, 1, 2, 3],
[1, 2, 6, 7],
[1, 6, 7, 8]])
np.argsort(a,axis=0)
array([[1, 1, 1, 1],
[0, 2, 0, 0],
[2, 0, 2, 2]])

5, 统计函数:unique()保留数组中不同的值,返回两个参数。bincount()对数组中各个元素出现的次数进行统计,还可以设定相应的 权值。

b=np.random.randint(0,5,8)
b
array([2, 3, 3, 0, 1, 4, 2, 4])

np.unique(b)
array([0, 1, 2, 3, 4])

c,s=np.unique(b,return_index=True)
c
array([0, 1, 2, 3, 4])
s
array([3, 4, 0, 1, 5])(元素出现的起始位置)

b
array([2, 3, 3, 0, 1, 4, 2, 4])

np.bincount(b)
array([1, 1, 2, 2, 2]) 分别是0 1 2 3 4的个数;
w=np.random.rand(8)
w
array([ 0.29529445, 0.4554129 , 0.69615963, 0.4766137 , 0.97929591,
0.46069939, 0.76476676, 0.74556715]) 权重值;
np.bincount(b,w)。
array([ 0.4766137 , 0.97929591, 1.06006121, 1.15157254, 1.20626654]) 权重和;

6,掩码数组:表示的是不完整的数据或是含有无效值的数据。

import numpy.ma as ma
b
array([2, 3, 3, 0, 1, 4, 2, 4])
mask=b<3
mx=ma.array(b,mask=mask)
mx
masked_array(data = [– 3 3 – – 4 – 4],
mask = [ True False False True True False True False],fill_value = 999999)

接下来就可以对这些数据操作了。

0 0
原创粉丝点击