当前位置:首页 > 编程笔记 > 正文
已解决

numpy公式

来自网友在路上 180880提问 提问时间:2023-11-09 12:44:56阅读次数: 80

最佳答案 问答题库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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!