numpy公式
最佳答案 问答题库808位专家为你答疑解惑
结构数组
它跟pandas的DataFrame有点类似。
x = np.array([[‘张三’,25,165],[‘李四’,20,175]])
print(x)
x.shape
x.dtype
但是现在肯定算不上结构数组,这样设置,毕竟不能通过x[‘name’]得到’张三’。
help上有一个介绍。
x = np.array([(1,2),(3,4)])
print(x)
print(x.shape)
[(1,2),(3,4)],中间虽然有小括号括起来,但是结果仍然用[]输出。不作为结构数组。
但是一旦指定了列的名称。它的shape就不是(2,2)而是(2,)
x = np.array([(1,2),(3,4)],dtype=[(‘a’,‘<i4’),(‘b’,‘<i4’)])
print(x)
print(x.shape)
print(x[0][0])
x[‘a’]
那么上面的np.array([[‘张三’,25,165],[‘李四’,20,175]])可以进行修改。
(‘张三’,25,165)必须使用小括号。
x = np.array([(‘张三’,25,165),(‘李四’,20,175)], dtype=[(‘name’,‘|U32’),(‘age’,‘<i4’),(‘height’,‘<f4’)])
print(x)
print(x.shape)
print(x[0][0])
print(x[‘name’])
print(x[0][‘name’])
当然,虽然有这种功能,但是没有pandas方便。只做介绍。
上面的(‘age’,‘<i4’)只有在处理字节流的时候才有用。<低位字节在前,小端模式,>高位字节在前,大端模式。
六、数组的元素级别计算及广播
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([[11, 12, 13], [14, 15, 16], [17, 18, 19]])
print(a)
print(b)
a+b
c = a + b
print©
######或者
np.add(a,b,c)
print©
当对两个数组进行计算时,会对对应的元素进行计算。
但是如果两个组数的形状不同时,会进行如下的广播处理:
①让所有输入数组都向着维数最多的数组看齐。shape中属性不足的部分都通过在前面加1补齐。
②输出数组的shape属性是输入数组的shape属性在各个轴上的最大值
③如果输出数组的某个轴的长度为1或与输出数组对应轴长度相同,这个数组就能够用来计算,否则出错。
④当输入数组的某个轴长度为1时,沿着此轴运算时都用此轴上的第一组的值。
虽然说起来很复杂,但是看例子就容易理解了。
a是1-9的3*3的矩阵:
例子1:
那么a+1,就是a+3*3的全1的矩阵。
例子2:
那么a+[1,2,3],就是a+3*3的全是[1,2,3]的矩阵。
a的shape是(3,3),[1,2,3]的shape是(3,).根据第一条,变成shape是(1,3)。[[1,2,3]]
根据第三条,可以计算。
根据第四条,扩展到shape(3,3),也就是[[1,2,3],[1,2,3],[1,2,3]]
例子3:
a=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b=np.array([[1,2,3],[1,2,3]])
a+b
a的shape是(3,3),b的shape是(2,3)。根据第三条,不能计算。
例子4:
shape(1,3)的数组+shape(3,1))的数组
两个数组的维度都是2,所以结果也是2。根据结果的维度的长度是最大值。所以结果的shape是(3,3).
计算的时候,a、b根据第四条扩展规则。都用相同的值。
变成了。
案例:
七、repeat操作
在创建数组的时候,有时候附近的数字是有一定的规律的。可以使用repeat操作。
比如:将下面的a变到b,毕竟很多时候,一个一个写太麻烦了。
a = np.array([[1,2,3],[4,5,6]])
print(a)
b = np.array([[1,1,2,2,3,3],[1,1,2,2,3,3],[4,4,5,5,6,6],[4,4,5,5,6,6]])
print(b)
修改
a=np.arange(1,7).reshape(2,3)
print(a)
b = a.repeat(2,axis=1)
print(b)
b = b.repeat(2,axis=0)
print(b)
有些多维数组可以通过数据源直接转化,有的需要自己一点一点写。有的可以用更快捷的方式。
比如
创建数字连续的数组的。可以使用arange()与reshape()组合。
等差
等比
但是如果创建一个下面这样的数组呢?
八、矩阵的积(外积) .dot() 与矩阵转置.transpose()
矩阵的积跟元素的计算不是一个概念。它不是两个矩阵的元素分别相乘。
两个矩阵相乘结果所得到的的数组中每个元素为,第一个矩阵中与该元素行号相 同的元素与第二个矩阵中与该元素列号相同的元素,两两相乘后求和 。
满足第一个矩阵的列数与第二个矩阵的行数相 同,那么可以进行矩阵.dot()运算。
c.transpose()
至于在线性代数的应用,就不讲了。我自己都快忘光了。有兴趣的自行查看网上的课件。
九、聚合函数
聚合函数是对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因此求数组所有元素之和、求所有元素的最大最小值以及标准差的函数就是 聚合函数
9.1所有的值的聚合应用
用下面的数组举例
①求和 .sum()
②最大值、最小值 .max() .min()
③平均值 .mean()
④方差 .var()
百度百科上的公式:
这里应该就是
((1-3.5)2+(2-3.5)2+(3-3.5)2+(4-3.5)2+(5-3.5)2+(6-3.5)2)/6
⑤标准差 .std()
就是方差的开方。
⑥样本的标准偏差 .std(ddof=1)
关于样本标准差为什么是除以(n-1),可以阅读
样本标准差的意义是什么? - 知乎 (zhihu.com)
设置参数 ddof=1,当然你也可以设置为ddof=2,那就是除以(n-2)
⑦加权平均 average(data,weights=…)
所以我们还需要一个权重的数组。在参数weights=None设置权重。
只能写作 np.average(data,weights=…) ,因为ndarray对象没有设置这个方法。
⑧连乘积 np.product(data)
np.product© 只能这么写。对象没有这个方法。
⑨整数元素统计 np.bincount(data)
这个解释有点麻烦,可以看看下面的文章
numpy.bincount详解_踩风火轮的乌龟-CSDN博客_np.bincount
10 去除重复元素 np.unique(data)
11 离散化 np.digitze(data,bins)
比如你有一堆的数据,0-1000内随机,(0-100]用代表1,(100-200]代表2…
可以写判断语句。再写入另一个数组。
当然这里可以使用np.digitze(data)
具体的使用方法可以查询。
numpy.digitize(data,bins)函数用法_还长不胖的博客-CSDN博客_numpy.digitize
12 一维直方图统计 np.histogram (data,bins)
这个跟11中的np.digitze(data,bins) 有点类似。不过这里是统计区间内的数字的个数。就从直方图统计可以大概猜测它的用途。
区间是自动划分的。除了最后一个区间,都是[a,b),最后一个区间[a,b]
上面划分的区间如下。
区间个数,是元素个数-1。然后数字1出现了3次,在[1,1.4)区间内。
数字2出现了1次,在[1.8,2.2)区间内
…以此类推
也可以手动设置区间。
9.2 部分值的聚合应用
比如一个二维数组,你可以根据根据行计算平均值,也可以根据列进行平均值。
这个时候比较好理解。
你可能就直接理解为axis=1代表按行处理,axis=0代表按照列处理。
但是如果升级到更高的维度呢?
指定axis参数。
在三维及以上的时候必须理解第几轴的概念。
比如一个数组的shape(2,4,5,6)6代表的是轴3,2代表的是第0轴,…
数组中最前面的值,是最后一个轴的长度。
比如[[[[1,2,3,4,5,6]…
所以三维的时候。
例子1:
例子2:
例子3:
十、np.where函数
比如两个数组,进行一个的条件判断,条件达成,在A数组取值,条件不达成,在B数组取值。
它其实就是一个条件表达式。
例子:如果a的值能被3整除,a中取值,否则b中取值
nupy的用法还有很多,而且需要具体的案例练习。这里不意义罗列了。请自行购买书籍学习。
当然由于numpy是很多库的基础,你可以不学习numpy的其他用法,直接学习其他库的用法。然后使用简单的numpy用法就可以解决问题
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"numpy公式":http://eshow365.cn/6-36212-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: C 语言 for循环
- 下一篇: 不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?