Python3:numpy的简单使用3(运算,切片和统计操作(数组间的运算,数组与数的运算))

声明

当前的内容用于本人复习,主要针对ndarray中的数据进行不同的操作,用于复习!

1.计算,切片操作

# 使用当前的numpy中的narray中的计算功能
import numpy as np

np_array = np.random.uniform(1, 10, 100)
print("原来的数据为:{}".format(np_array))
# 现在获取当前的数据中大于5的数据
print("输出当前数据大于5的数据:{}".format(np_array > 5))

# 这里产生的数据就是一些布尔值的操作,现在需要将输出这些大于5的的数据,通过当前的布尔索引的方式获取值
print("输出当前数据大于5的所有的数据:{}".format(np_array[np_array > 5]))

# 现在需要将小于5 的数据设置为默认的数据5然后打印所有的数据
np_array[np_array <= 5] = 5
print("输出当前修改后的数组:{}".format(np_array))

# 总结:当前的使用逻辑运算符的方式很容易将narray中的符合条件的数据获取到,还有可以设定当前的默认值
# 这个方法的使用方式为:array>number  或者使用布尔下标的方式获取 : array[array>number] 还可以使用array[array>number]=number2的方式为当前的指定的条件的数据设置默认值

# 开始画图
# import matplotlib.pyplot as plt
# plt.figure()
# plt.hist(np_array,bins=100)
# plt.show()

print("使用当前的any和all函数处理数据的结果===========")
# 通用的判断函数操作:all函数,还有any函数
# 当前的np.all()函数的意思就是如果当前的所有的结果为True的时候结果就返回True
# 使用当前的np.any()函数的意思就是如果当前的结果中有一个结果为True的时候就返回True,否则返回False
print("前五个数据为:{}".format(np_array[:5]))
print("当前数据中前五个数据都大于6的结果为:{}".format(np.all(np_array[:5] > 6)))
print("当前数据中前五个数据中有一个大于6的结果为:{}".format(np.any(np_array[:5] > 6)))

# 使用三元运算符的方式实现操作,如果当前的数据小于5就设置为0,如果大于5就将值设置为1
# 这里可以使用当前的np.where();函数来实现当前的操作,当前的第一个参数为,当前的比较的布尔数组,第二为结果为True的时候显示的数值
# 第三个参数数就是结果为False的时候显示的数值
print("输出打那个前的操作后的结果为:{}".format(np.where(np_array[:5] <= 5, 0, 1)))

# 使用当前np中函数执行当前的多个条件的操作,通过查看方法发现当前的操作中具有多个方法,其方法内容如下
# np.logical_or()   :应该就是逻辑或者
# np.logical_and()  :应该就是逻辑并且
# np.logical_not()  :应该就是逻辑非

# 测试当前的逻辑并且这个方法
print("前五的数据:{}".format(np_array[:5]))
print(np_array[:5]<8)
print(np_array[:5]>5)
print("获取当前的数据中前五个数据,这个五个数据中的值大于5并且小于8的结果为:{}".format(np.logical_and(np_array[:5] > 5, np_array[:5] < 8)))

# 发现当前的and就是取得并集
# 使用当前的逻辑非这个方法
print("上面的结果取非的操作:{}".format(np.logical_not(np_array[:5] > 5, np_array[:5] < 8)))

# 发现这个结果与上面的并且的结果相反

# 测试逻辑或
print("上面的结果取非的操作:{}".format(np.logical_or(np_array[:5] > 5, np_array[:5] < 8)))
# 当前的结果都为True,只要俩个结果中有一个true这个结果就为True

结果:
在这里插入图片描述

总结:

1.我们可以使用当前的ndarray这个数组实现任何><=/的操作,当前默认产生的数据为:一组布尔类型的数组,例如:ndarray>1(就是获取当前数据中所有大于为True,小于等于1为False的数组)

2.可以在当前的ndarray[ndarray>1]的方式获取当前ndarray这个数组中的所有大于1的数组并显示当前的数据

3.可以使用ndarray[ndarray>num]=num2方式把符合要求的数据变成指定的默认的值

4.可以使用np.where()方法把符合条件的值设置默认值,将不符合的值也设定默认值

5.如果是复杂的逻辑可以使用np.logical_or(),np.logical_and(),np.logical_not()这几个函数来实现复杂的逻辑操作

2.使用统计操作

# 对当前的数据进行相应的统计操作
import numpy as np

# 首先随机生成一组数据,就是八个商品每天的价格涨幅
random_price = np.random.uniform(1, 10, (8, 5))
print(random_price) # 当前的 x轴表示一个商品的5天的涨幅

# 获取这里面最大的涨幅度为
print(random_price.max())
print(np.max(random_price))
# 可以使用当前的np.max函数或者当前产生的对象的max函数,进行操作,结果完全相同

# 获取5天中每个商品的最大涨幅
print("指定获取最大值的方向:{}".format(random_price.max(axis=1)))
# 通过定义axis方式判断获取需要获取数据的轴,1在这里表示的就是当前的x轴的数据,即每一行的最大涨幅

# 获取五天中每天的最大涨幅
print("获取最大值:{}".format(random_price.max(axis=0)))

# 获取5天中最大涨幅所在的下标,当前的获取下标的操作主要使用argmax()其中的参数必须要指定轴位置
print("获取最大值的下标:{}".format(random_price.argmax(axis=0)))


结果:
在这里插入图片描述

总结:

1.可以使用np.max()或者np.min等或者对应的ndarray中的max()或者min()等方式实现获取最大或者最小值的操作

2.可以在操作的时候指定当前的axis值,默认0就是统计shape中的第一个的数据

3.可以通过argmax方式获取最大值所在的下标

3.数组与数组间的运算以及数组和值之间的运算

# 实现数组与数组之间的操作,和运算
import numpy as np

one_array = np.array([[1, 2, 3], [4, 5, 6]])
print("直接将当前的数组中的所有的数据*10操作:{}".format(one_array * 10))
# 原生的python的数组不支持这种操作

# 通过以上可以得出,我们可以对当前的nparray中数组中的任何元素进行运算操作,+ - * /
two_array = np.array([[1, 2, 3], [4, 5, ]])
# 将两个数组相加减
# print(one_array - two_array)
# operands could not be broadcast together with shapes (2,3) (2,) 报了这个错

# 上述中说明了不同维度的数据如果需要进行计算,就必须要满足一定的条件操作
# 满足条件1 当前维度的长度一致,当前维度的长度为1,满足这两个条件中的一个条件就可以满足运算条件

# 开始打印当前的形状
print("当前第一个数组的形状为:{},当前第二个数组的形状为:{}".format(one_array.shape, two_array.shape))
# 发现当前的形状中无法描述这个种情况,可能是由于当前的数据中的每一个维度的数据的长度不一致导致的,所以这种情况实不满足当前的广播规则的

three_array = np.array([[2, 2], [2, 2]])
print(three_array.shape)
# 通过打印形状,发现当前的数据也不满足当前的维度的操作,由于从右边看起 2 ,3这个两个数不一样所以不能运算操作
four_array = np.array([[1, 1, 1], [2, 2, 2]])
print(four_array.shape)
# 这个维度基本一致所以可以运算
print("进行维度运算后的结果为:{}".format(four_array + one_array))
print()
five_array = np.array([[1, 2, 3]])
print(five_array.shape)
# 这个是可以运算的,从右边第一个 3 ,3维度满足,第二个为 2,1发现这两个数中有一个数为1,所以也可以进行计算操作
print(five_array * one_array)

# 以上就是当前的数组间的运算操作,需要注意的是,只是正常的+数字计算或者其他的对数字的操作可以使用
# 如果是数组对数组的操作的时候需要注意的是当前的数据操作需要满足打那个前的广播运算法则,满足就可以运算,否则不能进行数组间的运算操作

结果:

在这里插入图片描述

总结:

1.我们可以直接使用ndarray执行任何与单一数字的任何运算操作,获得的值就是当前的数组中的每一个数据的操作,获得的数组

2.当我们使用数组和数组间的操作的时候需要注意,如果不符合要求的话就会报这个错误:

  1. operands could not be broadcast together with shapes (2,3) (2,) 报了这个错,表示当前的类型操作不符合广播原则
  2. 广播原则:就是两个数组中从左开始判断,如果数相等或者数有一个为1的时候才能进行运算操作,否则就报错

4.总结

1.在实现数组与数字的操作的时候可以执行任何操作,在数组与数组之间的操作需要满足当前的广播原则

2.在使用numpy的时候很容易对当前的数据进行操作,获取数组中符合条件的内容,以及进行对应的操作

以上纯属个人见解,如有问题请联本人!

发布了215 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/103745718
今日推荐