16、计算正弦曲线上点的x和y坐标并绘制
编写一个 NumPy 程序来计算正弦曲线上点的 x 和 y 坐标,并使用 matplotlib 绘制这些点。
import numpy as np import matplotlib.pyplot as plt # Compute the x and y coordinates for points on a sine curve x = np.arange(0, 3 * np.pi, 0.2) y = np.sin(x) print("Plot the points using matplotlib:") plt.plot(x, y) plt.show()
# 得到的x数据: [0. 0.2 0.4 0.6 0.8 1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8 5. 5.2 5.4 5.6 5.8 6. 6.2 6.4 6.6 6.8 7. 7.2 7.4 7.6 7.8 8. 8.2 8.4 8.6 8.8 9. 9.2 9.4]
【1】np.sin(x): 表示对x元素取正弦
【2】我们做出来的x是离散的点,可以看到这里用plt.plot(x, y)
把离散的点变成了光滑的曲线
【3】np.pi:就是π(3.1415926…)
17、查找给定数组中缺少的数据
编写一个NumPy程序来查找给定数组中缺少的数据。这题和第七题是一样的,都是使用isnan函数。
17、查找给定数组中缺少的数据 编写一个NumPy程序来查找给定数组中缺少的数据。这题和第七题是一样的,都是使用isnan函数。
18、检查两个数组是否相等
编写一个NumPy程序来检查两个数组是否相等。
import numpy as np nums1 = np.array([0.5, 1.5, 0.2]) nums2 = np.array([0.4999999999, 1.500000000, 0.2]) np.set_printoptions(precision=15) print("\nTest said two arrays are equal (element wise) or not:?") print(nums1 == nums2) ''' Test said two arrays are equal (element wise) or not:? [False True True] '''
nums1 = np.array([0.5, 1.5, 0.23]) nums2 = np.array([0.4999999999, 1.5000000001, 0.23]) print("\nOriginal arrays:") np.set_printoptions(precision=15) print("\nTest said two arrays are equal (element wise) or not:?") print(np.equal(nums1, nums2)) ''' Test said two arrays are equal (element wise) or not:? [False False True] '''
【1】nums1 == nums2:可以直接比较各个元素是否相等
【2】np.set_printoptions:用于控制Python中小数的显示精度
【3】np.equal(nums1, nums2):equals()方法用于验证数据是否等效
==和equal的区别
【1】这题当中可以看到,使用==和equals返回值都是一个布尔类型的list
【2】关于在pandas中的区别,看这篇文章: ==和equal的区别
19、创建从正态分布当中选的随机数组
创建一个形状为(10,4)的随机数的二维数组,从正态分布(200,7)中选择随机数。
import numpy as np np.random.seed(20) cbrt = np.cbrt(7) # 开立方根 nd1 = 200 print(cbrt * np.random.randn(10, 4) + nd1) ''' [[201.6908267 200.37467631 200.68394275 195.51750123] [197.92478992 201.07066048 201.79714021 198.1282331 ] [200.96238963 200.77744291 200.61875865 199.05613894] [198.48492638 198.38860811 197.55239946 200.47003621] [199.91545839 202.99877319 202.01069857 200.77735483] [199.67739161 193.89831807 202.14273593 202.54951299] [199.53450969 199.7512602 199.79145727 202.97687757] [200.24634413 196.04606934 198.30611253 197.88701546] [201.78450912 203.94032834 198.21152803 196.91446071] [201.0082481 197.03285104 200.63052763 197.82590294]] '''
【1】np.random.seed(int):用于制定随机数生成时所用算法开始的整数值,使得随机数据可预测。如果使用相同的seed()值,则每次产生的随机数都相同;如果不设置这个值,则系统根据时间来自己选择这个值,因此每次生成的随机数会因为时间差异而不同。
【2】numpy.random.rand(d0,d1,…,dn):randn函数返回一个或一组样本,具有标准正态分布。dn表示每个维度,返回值为指定维度的array。np.random.randn(10, 4) 表示生成二维数组,有10行4列。
【3】numpy.cbrt(x):立方根。
20、按行和列升序对给定数组进行排序
编写一个NumPy程序,按行和列升序对给定数组进行排序。
import numpy as np nums = np.array([[5.54, 3.38, 7.99], [3.54, 4.38, 6.99], [1.54, 2.39, 9.29]]) print("Original array:") print(nums) print("\nSort the said array by row in ascending order:") print(np.sort(nums)) # 按行排序 print("\nSort the said array by column in ascending order:") print(np.sort(nums, axis=0)) # 按列排序 ''' Original array: [[5.54 3.38 7.99] [3.54 4.38 6.99] [1.54 2.39 9.29]] Sort the said array by row in ascending order: [[3.38 5.54 7.99] [3.54 4.38 6.99] [1.54 2.39 9.29]] Sort the said array by column in ascending order: [[1.54 2.39 6.99] [3.54 3.38 7.99] [5.54 4.38 9.29]] '''
【1】np.sort(a, axis, kind, order) :对数组进行排序。
axis=1 是按照最后一个轴排序,axis=0 每一列各元素排序 axis=1 每一行各元素排序,默认-1 是按最后一个轴排序。
21、从给定数组中提取小于和大于指定数的数字
编写一个NumPy程序,从给定数组中提取所有小于和大于指定数字的数字。
import numpy as np nums = np.array([[5.54, 3.38, 7.99], [3.54, 4.38, 6.99], [1.54, 2.39, 9.29]]) print("Original array:") print(nums) n = 5 print("\nElements of the said array greater than",n) print(nums[nums > n]) # 找出所有大于5的元素,返回array n = 6 print("\nElements of the said array less than",n) print(nums[nums < n]) # 找出所有小于6的元素,返回array ''' Original array: [[5.54 3.38 7.99] [3.54 4.38 6.99] [1.54 2.39 9.29]] Elements of the said array greater than 5 [5.54 7.99 6.99 9.29] Elements of the said array less than 6 [5.54 3.38 3.54 4.38 1.54 2.39] '''
这里应该也是使用了布尔索引
22、创建与原数组相同形状和数据类型的数组
编写一个NumPy程序来创建给定数组的相同形状和数据类型的数组。用 0.0 填充新数组。
import numpy as np nums = np.array([[5.54, 3.38, 7.99], [3.54, 8.32, 6.99], [1.54, 2.39, 9.29]]) print("Original array:") print(nums) print("\nNew array of equal shape and data type of the said array filled by 0:") print(np.zeros_like(nums))
【1】np.zeros_like(nums)函数:主要是想实现构造一个矩阵W_update,其维度与矩阵W一致,并为其初始化为全0;这个函数方便的构造了新矩阵,无需参数指定shape大小。
23、以相反的顺序交换给定数组的行和列
编写一个NumPy程序,以相反的顺序交换给定数组的行和列。
import numpy as np nums = np.array([[[1, 2, 3, 4], [0, 1, 3, 4], [90, 91, 93, 94], [5, 0, 3, 2]]]) print("Original array:") print(nums) print("\nSwap rows and columns of the said array in reverse order:") new_nums = print(nums[::-1, ::-1]) print(new_nums) ''' Original array: [[[ 1 2 3 4] [ 0 1 3 4] [90 91 93 94] [ 5 0 3 2]]] Swap rows and columns of the said array in reverse order: [[[ 5 0 3 2] [90 91 93 94] [ 0 1 3 4] [ 1 2 3 4]]] None '''
【1】关于[::-1]
【2】关于[::-1, ::-1]
import numpy as np a=np.random.rand(5) print(a) [ 0.64061262 0.8451399 0.965673 0.89256687 0.48518743] print(a[-1]) ###取最后一个元素 [0.48518743] print(a[:-1]) ### 除了最后一个取全部 [ 0.64061262 0.8451399 0.965673 0.89256687] print(a[::-1]) ### 取从后向前(相反)的元素 [ 0.48518743 0.89256687 0.965673 0.8451399 0.64061262] print(a[2::-1]) ### 取从下标为2的元素翻转读取 [ 0.965673 0.8451399 0.64061262]
24、将两个相同大小的给定数组逐个元素相乘
编写一个NumPy程序,将两个相同大小的给定数组逐个元素相乘。
import numpy as np nums1 = np.array([[2, 5, 2], [1, 5, 5]]) nums2 = np.array([[5, 3, 4], [3, 2, 5]]) print("Array1:") print(nums1) print("Array2:") print(nums2) print("\nMultiply said arrays of same size element-by-element:") print(np.multiply(nums1, nums2))
【1】multiply(a,b):表示乘法,如果a,b是两个数组,那么对应元素相乘
25、转换给定数组
编写一个NumPy程序来创建一个给定形状(5,6)和类型的新数组,并用零填充。
更改以下格式的所述数组:
给定数组:
[[0 0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0]]
新数组:
[[3 0 3 0 3 0] [7 0 7 0 7 0] [3 0 3 0 3 0] [7 0 7 0 7 0] [3 0 3 0 3 0]]
import numpy as np nums = np.zeros(shape=(5, 6), dtype='int') print("Original array:") print(nums) nums[::2, ::2] = 3 nums[1::2, ::2] = 7 print("\nNew array:") print(nums) ''' Original array: [[0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0]] New array: [[3 0 3 0 3 0] [7 0 7 0 7 0] [3 0 3 0 3 0] [7 0 7 0 7 0] [3 0 3 0 3 0]] '''