NumPy作业

NumPy 与Matplotlib 作业2022

1、创建一个100000长度的随机数组,使用两种方法对其求三次方,并比较所用时间

import numpy as np

def sum_python(ary):
    temp = []
    for i in range(len(ary)):
        temp.append(ary[i]**3)
    return temp
def sum_numpy(ary):
    return ary**3

a = np.random.rand(100000)

%timeit -n 10 sum_python(a)
%timeit -n 10 sum_numpy(a)
# 时间结果:
108 ms ± 18.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
8.76 ms ± 1.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

发现Numpy方法的时间要远小于python方法

2、创建一个5*3随机矩阵和一个3*2随机矩阵,求矩阵积

import numpy as np
Ma_1 = np.matrix(np.random.rand(5,3))
Ma_2 = np.matrix(np.random.rand(3,2))
print(Ma_1*Ma_2)
# 矩阵乘积结果:
[[1.19647269 0.96521576]
 [1.07259398 0.87169754]
 [0.89269422 0.42897571]
 [0.27013765 0.23504708]
 [0.89707348 0.67875545]]

3、矩阵的每一行的元素都减去该行的平均值

import numpy as np
Ma = np.matrix(np.random.rand(5,5))
print(Ma - Ma.mean(axis=1))
# 结果:
[[-0.15157967  0.22187148  0.27537962 -0.60743129  0.26175986]
 [ 0.47047551 -0.14092872 -0.47222105 -0.13748633  0.28016059]
 [-0.14921571 -0.02700586 -0.15212659 -0.23756921  0.56591737]
 [ 0.02641876  0.306315   -0.44702438  0.10964596  0.00464465]
 [ 0.31959287 -0.03783668 -0.2307182  -0.01001591 -0.04102209]]

4、正则化一个5*5随机矩阵

正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大最小值,则正则化后a = (a - min)/(max - min)

import numpy as np
Ma = np.matrix(np.random.rand(5,5))
maxa = Ma.max()
mina = Ma.min()
print((Ma - mina)/(maxa - mina))
# 正则化结果:
[[0.6637692  0.94956831 0.309877   0.53604182 0.29724287]
 [0.52161554 0.91461689 0.26880635 0.93652537 0.75520014]
 [0.70869268 0.79627382 0.50627554 0.1316578  1.        ]
 [0.21756953 0.21751428 0.48819966 0.3592749  0.        ]
 [0.41166455 0.27998541 0.91691498 0.89417939 0.5746174 ]]

5、将一个一维数组转化为二进制表示矩阵。

例如 [123] 转化为 [ [001] [010] [011] ]

import numpy as np

def trans(ary):
    num = len(ary)
    n_trans = np.zeros(shape=(num,num),dtype='int')
    for i in range(num):
        n = ary[i]
        for j in range(num-1,-1,-1):
            n_trans[i][j] = n%2
            n = n//2
    return n_trans

targ = [1,2,3]
print(trans(targ))
[[0 0 1]
 [0 1 0]
 [0 1 1]]

6、实现冒泡排序法

def BubbleSort(ary):
    n = len(ary)
    for i in range(n):
        for j in range(0, n-i-1):
            if ary[j] > ary[j+1] :
                ary[j], ary[j+1] = ary[j+1], ary[j]
    return ary

targ = [1, 23, 3, 45, 37, 91, 65, 6, 78, 9]
print(targ)
print(BubbleSort(targ))
[1, 23, 3, 45, 37, 91, 65, 6, 78, 9]
[1, 3, 6, 9, 23, 37, 45, 65, 78, 91]

7、画出如下图的各通道灰度直方图,并分析灰度均值、方差、最大最下。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

img = np.array(Image.open('7.png'))
_, axes = plt.subplots(1, 3, figsize=(10,3))
colus = 'RGB'
for i, ax in enumerate(axes):
    temp = img[...,i].reshape(-1)
    ax.hist(temp, bins=50)
    ax.set_title(colus[i])
    print(f"Channel-{colus[i]}: mean={np.mean(temp):4f},
     std={np.std(temp):4f}, max={np.max(temp)}, min={np.min(temp)}")
plt.show()
Channel-R: mean=179.404227, std=49.286937, max=255, min=33
Channel-G: mean=100.325870, std=53.615759, max=240, min=0
Channel-B: mean=106.383851, std=34.810739, max=217, min=32

在这里插入图片描述

8、画出不通初值的函数曲线。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 1, 0.01)
def eluer(y0):
    def fun(x, y):
        return x**2 + y**2 

    step = 99
    u = [y0] + [0  for i in range(step)]
    for i in range(step):
        u[i+1] = u[i] + 0.01 * fun(x[i],u[i])
    return u[1:]

fig = plt.figure()
ax = fig.gca()
for init in [-1, 0, 0.3, 0.5, 0.8]:
    w = eluer(init)
    ax.plot(x[1:], w, label=f"y[0] = {init}")
    ax.legend()
plt.show()

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: numpy、pandas和matplotlib是Python中常用的数据处理和可视化工具库。它们可以帮助我们更方便地进行数据分析和展示。 numpyPython中的一个科学计算库,提供了高效的数组操作和数学函数。它可以用来处理各种类型的数据,如数字、字符串、图像等。 pandas是Python中的一个数据分析库,提供了高效的数据结构和数据分析工具。它可以用来处理各种类型的数据,如表格、时间序列等。 matplotlib是Python中的一个数据可视化库,提供了各种绘图工具和图形界面。它可以用来绘制各种类型的图表,如折线图、散点图、柱状图等。 在使用这些库时,我们需要先导入它们的模块,然后调用相应的函数来完成我们需要的操作。例如,我们可以使用numpy中的array函数来创建一个数组,使用pandas中的read_csv函数来读取一个CSV文件,使用matplotlib中的plot函数来绘制一个折线图等。 总之,numpy、pandas和matplotlib是Python中非常重要的数据处理和可视化工具库,掌握它们的使用方法对于进行数据分析和展示非常有帮助。 ### 回答2: numpyPython数据科学中最基本的库之一,它提供高效的数组和矩阵运算,使处理数字计算变得更加容易。numpy的数组在数学计算和数据科学方面被广泛使用,这些应用包括线性代数、数组操作、统计学和图像处理等。 pandas是Python中用于数据处理和数据分析的重要库之一,它被用来读取、跟踪和管理大量数据。pandas提供高效的DataFrame和Series数据结构,使得数据分析更加简洁、易于阅读和理解。pandas在处理数据时非常方便,可以轻松地执行数据过滤、排序、聚合和连接。 matplotlib是Python中用于数据可视化和科学绘图的库,它提供Python中最灵活和最可定制的绘图选项之一。使用matplotlib,用户可以生成各种不同的图形展示,包括线图、柱状图、散点图和饼图等,同时matplotlib还允许用户进行自定义调整、注释和标记。 以上三个库的组合提供了Python中非常强大的数据科学生态系统,适合用于数据处理、分析和可视化。这些库的使用也非常广泛,包括数据科学领域、金融领域、物理学领域和天文学领域等。无论是初学者还是专业人士,都可以从中获益和发挥作用。 ### 回答3: numpy、pandas、和matplotlib是Python中非常常用的三个模块,它们能够方便地进行数据处理和数据可视化。 首先,我们来谈一下numpynumpyPython中处理科学数据的基础模块。通过使用numpy,我们能够方便地进行矩阵运算、数值分析、信号处理、图像处理等科学计算,从而更好地处理数据。在numpy中最重要的是其多维数组对象ndarray,通过使用ndarray,我们可以对数组中的数据进行高效的数学运算,例如加减乘除等。另外,numpy还提供了一些方便的函数,例如随机数生成函数、拷贝和转换函数等,使得使用numpy进行科学计算变得更加得心应手。 接下来,我们来说一下pandas。Pandas是一个Python工具包,主要用于数据处理和数据分析。Pandas中的两个主要数据结构是Series和DataFrame,它们可以方便地处理各种类型的数据,从而使得数据清洗和数据分析变得更加高效和简单。使用Pandas,我们可以轻松读取和导入数据,处理和过滤数据,清理和填充数据,以及进行数据分析和可视化。Pandas提供了很多工具,例如数据重构、分组、聚合、切片、索引、透视以及时间序列等,使得数据处理和分析变得更加高效和灵活。 最后,我们来看一下matplotlib。Matplotlib是一个Python中常用的数据可视化工具。它提供一系列高质量的数据可视化图形,例如折线、散点、柱形、饼图、等高线、瀑布图等等。通过使用matplotlib,我们可以快速地将获得的数据进行可视化,从而更容易地发现其中的规律和特点。Matplotlib提供了丰富的参数设置和样式选项,使得生成的图形可以更加美观和专业。同时,matplotlib还提供了集成的图像显示和保存函数,可以轻松地将图形保存在不同的格式中,例如PNG、PDF、SVG、EPS等格式。 总之,numpy、pandas、和matplotlib都是处理和分析数据的重要工具,它们相互补充,共同构成了Python中的数据分析生态系统。通过掌握这三个工具,我们可以轻松地处理和分析各种类型的数据,从而更好地理解数据和发现数据规律。为了掌握这三个工具,我们需要认真学习它们的基本语法和常用函数,并勤加练习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值