Python数据分析NumPy和pandas(四、NumPy数组的数学计算)

NumPy数组进行数学计算

NumPy在数据分析、建模、AI等领域有非常重要的作用,比如机器学习算法需要处理大量的数据,使用数组能大大提高效率。NumPy数组的优点之一在于使您能够对数据进行批处理操作,而无需编写任何 for 循环对数组中的每个元素遍历计算。相等大小的数组之间的任何算术运算都按元素应用运算符进行计算。

1.乘法 减法 平方 除法运算

import numpy as np

arr = np.array([[1., 2., 3.], [4., 5., 6.]])

#乘法运算
arr_1 = arr * arr
print(arr_1)

#减法运算
arr_2 = arr - arr
print(arr_2)

#平方运算
arr_3 = arr ** 2
print(arr_3)

#除法运算
arr_4 = 1 / arr
print(arr_4)

以下对应输出arr_1, arr_2,  arr_3,  arr_4结果输出:

arr_1输出 :

[[ 1.  4.  9.]
 [16. 25. 36.]]

arr_2输出:
[[0. 0. 0.]
 [0. 0. 0.]]

arr_3输出:
[[ 1.  4.  9.]
 [16. 25. 36.]]

 arr_4输出:
[[1.         0.5        0.33333333]
 [0.25       0.2        0.16666667]]

对于上面的1/arr 是将1除以arr数组中每个位置上的元素。

2.比较运算

扫描二维码关注公众号,回复: 17494093 查看本文章
import numpy as np

arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr2 = np.array([[0., 4., 1.5], [8., 1., 22.]])

#比较运算
arr_5 = arr > arr2
print(arr_5)

以上输出:

[[ True False  True]
 [False  True False]]

比较运算符需要相同shape属性的数组进行比较,否则会报错。如下

3.数组的索引和切片

NumPy 数组索引可以有多种方式来选择子集或单个元素。

对于一维数组相对很简单,一维数组的子集或单个元素的选择类似于Python 列表。

arr = np.arange(10) 生成如下一维数组

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

选择单个元素:arr[5]  用中括号,‘5’是索引位置,从0开始算,输出5

选择数组子集:arr[5:8]中括号中,‘5‘表示起始索引位置,’8‘表示结束索引位置,输出的子集不包括索引8所在的元素。输出[5 6 7]。

4.数组元素重新赋值

对于上面的一维数组我们可以给单个元素赋值,也可以通过选择的子集给多个元素赋予相同的值,如下:

arr[5] = 55  arr数组输出[0, 1,  2, 3, 4, 55, 6, 7, 8, 9]

arr[5:8] = 55 arr数组输出[0, 1,  2, 3, 4, 55, 55, 55, 8, 9]。

注意:与 Python 的内置列表的区别是数组子集(切片)是原始数组上的引用(或者可以理解为指针或视图)。这意味着所选的子集数据不会被复制,对子集的任何修改都将反映在源数组中。看如下示例:

arr_slice = arr[5:8]  将子集赋值给一个变量,当前这个变量输出[55, 55, 55]。arr_slice当前也可以理解为一个一维数组。我们将arr_slice数组的索引位置为1的元素重新赋值,arr_slice[1] = 555,则当前arr_slice输出[55, 555, 55],同时输出arr数组输出[0, 1,  2, 3, 4, 55, 555, 55, 8, 9]。

另外如果中括号中的冒号左右不带任何索引值,也表示将赋值给所有元素,例如:arr_slice[:]=66 则arr输出[0, 1,  2, 3, 4, 66, 66, 66, 8, 9]

之所有NumPy的数组不设计成复制数据,是因为通常我们用NumPy处理大量的数据,如果大量的复制,内存和性能会大大受影响。但如果你确实需要一个副本,可以用copy函数,例如:arr_slice=arr[5:8].copy()

好累~~~~~~下次接着学高维数组的计算索引等知识。

猜你喜欢

转载自blog.csdn.net/FreedomLeo1/article/details/142336532