• 科学计算和可视化


    一、numpy和matplotlib库的学习笔记

    (1)numpy库

    1,从数值范围创建数组

     1 numpy.arange(start, stop, step, dtype)#参数分别为起始值,终止值,步长和数据类型 

    2.创建等间隔一位数组

     1 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)#参数分别为起始值,终止值,数据数,是否包含stop值,是否显示间距和数据类型 

    3.使用数字 0 将一个全为 1 的 5x5 二维数组包围

     1 Z = np.ones((5,5)) 2 Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0) 

    4.创建一个 5x5 的二维数组,并设置值 1, 2, 3, 4 落在其对角线下方Z = np.diag(1+np.arange(4),k=-1)

    5.创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置

    1 Z = np.zeros((10,10),dtype=int)

    2 Z[1::2,::2] = 1

    3 Z[::2,1::2] = 1 

    6.创建一个 0-10 的一维数组,并将 (1, 9] 之间的数全部反转成负数

    1 Z = np.arange(11)

    2 Z[(1 < Z) & (Z <= 9)] *= -1  

    7.找出两个一维数组中相同的元素

    1 Z1 = np.random.randint(0,10,10)
    2 Z2 = np.random.randint(0,10,10)
    3 print("Z1:", Z1)
    4 print("Z2:", Z2)
    5 np.intersect1d(Z1,Z2)

    8.返回每行,列最大值

    1 np.argmax(a, axis=0) #行最小值是argmin函数

    2 np.max(a, axis=0) #列最大值 

    9..使用 NumPy 打印昨天、今天、明天的日期

    1 yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
    2 today     = np.datetime64('today', 'D')
    3 tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
    4 print("yesterday: ", yesterday)
    5 print("today: ", today)
    6 print("tomorrow: ", tomorrow)

    10.几个常用的函数

     1 flat #返回
     2 
     3 np.nonzero([1,0,2,0,1,0,4,0])#返回一维数组中非 0 元素的位置索引
     4 
     5 np.dot(A, B)#矩阵相乘
     6 
     7 np.power(x,4)#对x数组的每个值4次方
     8 
     9 np.set_printoptions(precision=2)#对于二维随机数组中各元素,保留其 2 位小数
    10 
    11 Z/1e3#科学记数法输出 NumPy(Z) 数组
    12 
    13 a.argsort()#打印各元素在数组中升序排列的索引
    14 
    15 a.real #属性,数组a的实部
    16 a.imag #属性,数组a的虚部
    17 
    18 numpy.linalg.inv()# 函数计算矩阵的乘法逆矩阵。
    19 
    20 numpy.linalg.solve() #函数给出了矩阵形式的线性方程的解。
    21 
    22 umpy.matlib.eye() #函数返回一个矩阵,对角线元素为 1,其他位置为零。
    23 
    24 np.c_[M1, M2]#按列连接两个数组
    25 np.r_[M1, M2]#按行连接两个数组

    (2)matplotlib库

    Python 中可以用 matplotlib 库实现数据的可视化,以下是 matpltlib 库的一些介绍:

    1、 matplotlib.pyplot 模块可以画折线图,分为两个步骤,分别是 pyplot.plot() 和 pyplot.show() ,前者负责画图,后者将画好的图展示出来。

    2、 pyplot.plot( Series1 , Series2 ) 以 Series1 作为横坐标, Series2 作为纵坐标画出折线图;

    3、 在执行 2 中的函数后,可以使用 pyplot.xticks( rotation = 45 ) 将 x 轴的坐标显示逆时针旋转 45 ° ,默认为 0 °,也就是水平的,同理,可以用 pyplot.yticks( rotation = 45 ) 对 y 轴坐标做同样的操作。

    4、 可以使用 pyplot.xlabel( str ) 将 x 轴命名为 str 的值,同理可以用 pyplot.ylabel( str ) 将 y 轴命名为 str 的值。

    5、 可以使用 pyplot.title( str ) 为画出的折线图命名。

    6、 fig = pyplot.figure() 指出默认画图区间。

    7、 fig.add_subplot( 3 , 2 , 1 ) 在画图区间中添加子图,位置为,将画图区间分为三行两列的六块中的第一块,这里数的顺序为,从左往右,从上到下,按照此逻辑, ( 3 , 2 , 1 ) 所在的位置为第一行最左边, ( 3 , 2 , 3 ) 的位置为第二行左边,( 3 , 2 , 6 ) 的位置为第三行最右边。

    8、pyplot.figure( figsize = ( 3 , 6 ) )

      指定画图的区域为 长为 3 , 宽为 6 的大小。

    9、 pyplot.plot( x , y , c =  'red' , label = ' 250 ' ) 

      c 指定这一条线为红色,这里可以用颜色的英文名,也可以用颜色代号,那个 #  什么的;

      label 指定这条线的名字为 250.

    10、 pyplot.legend( loc = 'best' )

      将所有线的名字与线的对照框放到最适合的位置, loc 还可以设置为别的参数。

    11、 ax = pyplot.subplots()

      构建一个 pyplot 的子图对象。

    12、 ax.bar( list1 , list2 , 0.5 )

      list1 为条形图各个条距离远点的长度, list2 为条形图中条的高度, 0.5 为条的宽度,通过这三个数据确定图形的形状。

    13、 ax.set_xticks( list ) 

      设置 X 轴的坐标长度和标号,对于 y 轴也有对应函数实现此功能。

    14、 ax.set_xticklabels( list ) 

      设置 x 轴的坐标名,对于 y 轴也有对应函数实现此功能。

    15、ax.set_xlabel( str )

      设置 x 轴的名称,对于 y 轴也有对应函数实现此功能。

    16、 ax.set_title( str ) 

      设置图标的名称。

    17、 ax.barh( list1 , list2 , 0.5 )

      画水平的柱形图,其他函数一样, x 、 y 轴做对应转换。

    18、 ax.scatter( list1 , list2 )

      画散点图。

    19、 ax.hist( array , range ,bins )

      画柱形图, array 中的数值作为横轴的值,纵轴计算数值出现的次数, range 表示数值显示的范围, bins 表示总的显示柱的个数(控制间距)。

    20、 ax.set_ylim( 0 , 50 )

      设置纵轴的显示范围为 0 到 50 。

    21、  ax.boxplot( Series )

       画箱线图(还没搞明白箱线图是个什么玩意儿)。

    22、 ax.boxplot( Series[ list ].value )

      画 好几个箱线图。

    23、 ax.tick_params( bottom = False , top = False , left = False , right = False )

      设置图形框四边,是否显示刻度。

    24、 

    for key,spine in ax.spines.items():
        spine.set_visible(False)

      隐藏图形框的四条边框线。

    25、 pyplot.legend() 

    只对上一个画出的图有效,所以如果每个子图都要这个的话,就得在画下一个之前调用。

    分类变量绘图

     1 import matplotlib.pyplot as plt
     2 names = ['group_a', 'group_b', 'group_c']
     3 values = [1, 10, 100]
     4 
     5 plt.figure(1, figsize=(9, 3))
     6 
     7 plt.subplot(131)
     8 plt.bar(names, values)
     9 plt.subplot(132)
    10 plt.scatter(names, values)
    11 plt.subplot(133)
    12 plt.plot(names, values)
    13 plt.suptitle('Categorical Plotting')
    14 plt.show()

      

     二、雷达图

    Python123作业的成绩

     1 #-*- coding:utf-8 -*-
     2 '''
     3 Author: 一枚小可爱
     4 Mail:3129663273@qq.com
     5 
     6 '''
     7 import numpy as np
     8 import matplotlib.pyplot as plt
     9 
    10 #标签
    11 labels = np.array(['第一周','第二周','第三周','第四周','第五周','第六周'])
    12 #数据个数
    13 dataLenth = 6
    14 #数据
    15 data = np.array([5.0,9.1,9.8,9.0,9.7,8.8])
    16         
    17 angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
    18 data = np.concatenate((data, [data[0]])) # 闭合 # #将数据结合起来
    19 angles = np.concatenate((angles, [angles[0]])) # 闭合
    20 
    21 fig = plt.figure()
    22 ax = fig.add_subplot(121, polar=True)# polar参数!!代表画圆形!!!!
    23 #111代表总行数总列数位置
    24 ax.plot(angles, data, 'bo-', linewidth=1)# 画线四个参数为x,y,标记和颜色,闲的宽度
    25 ax.fill(angles, data, facecolor='r', alpha=0.1)# 填充颜色和透明度
    26 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")
    27 ax.set_title("一枚小可爱的成绩表
    2018310143108", va='baseline', fontproperties="SimHei")
    28 
    29 ax.set_rlim(0,10)
    30 ax.grid(True)
    31 plt.show()

    显示如下:

     

    三、自定义手绘风

     1 from PIL import Image
     2 #image 是 PIL库中代表一个图像的类
     3 import numpy as np
     4 
     5 #打开一张图片 “F:PycharmProjectscui.jpg” 是图片位置
     6 a = np.asarray(Image.open('D:\我的文件\Python\壁纸4.jpg')
     7                .convert('L')).astype('float')
     8 
     9 
    10 depth = 10.                    #浮点数,预设深度值为10
    11 grad = np.gradient(a)          #取图像灰度的梯度值
    12 grad_x,grad_y = grad           #分别取横纵图像的梯度值
    13 grad_x = grad_x*depth/100.     #根据深度调整 x 和 y 方向的梯度值
    14 grad_y = grad_y*depth/100.
    15 A = np.sqrt(grad_x**2 + grad_y**2 +1.)      #构造x和y轴梯度的三维归一化单位坐标系
    16 uni_x = grad_x/A
    17 uni_y = grad_y/A
    18 uni_z = 1./A
    19 
    20 vec_el = np.pi/2.2                       #光源的俯视角度,弧度值
    21 vec_az = np.pi/4.                        #光源的方位角度,弧度值
    22 dx = np.cos(vec_el)*np.cos(vec_az)       #光源对 x 轴的影响,np.cos(vec_el)为单位光线在地平面上的投影长度
    23 dy = np.cos(vec_el)*np.sin(vec_az)       #光源对 y 轴的影响
    24 dz = np.sin(vec_el)                      #光源对 z 轴的影响
    25 
    26 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)    #梯度与光源相互作用,将梯度转化为灰度
    27 b = b.clip(0,255)                          #为避免数据越界,将生成的灰度值裁剪至0‐255区间
    28 
    29 im = Image.fromarray(b.astype('uint8'))     #重构图像
    30 im.save("D:\我的文件\Python\壁纸9.jpg")      #保存图片的地址

    前后对比:

       

    四、数学规律

        题目:|x| + |y| = 1

     1 import numpy as np
     2 import matplotlib.pyplot as plt
     3 
     4 x = np.arange(-1.1, 1.1, .01)
     5 y = np.arange(-1.1, 1.1, .01)
     6 x, y = np.meshgrid(x, y)
     7 
     8 f = np.abs(x) + np.abs(y) - 1
     9 plt.figure()
    10 plt.contour(x, y, f, 0,)
    11 plt.title(r'$left|x
    ight|+left|y
    ight|=1$')
    12 plt.show()

    图如下:
      

  • 相关阅读:
    JavaScript Object Notation 轻量级的数据交换 json
    一步步打造基于ASP.NET的CMS内容管理系统Step3 添加新闻页面
    显示MSSQL SQL语句执行的时间
    解决国外空间数据库乱码的问题
    一步步打造基于ASP.NET的CMS内容管理系统Step4 权限设定(补充)
    笔记本键盘输入法失灵:fn键功能反了
    Jquery:十分钟打造一个类似是Twitter的系统,附源代码
    一步步打造基于ASP.NET的CMS内容管理系统Step1类别管理
    一步步打造基于ASP.NET的CMS内容管理系统Step2 系统配置(附源代码)
    google走后,google地图,google adsens等相关问题的看法
  • 原文地址:https://www.cnblogs.com/sun0618-/p/10742303.html
Copyright © 2020-2023  润新知