学习笔记整理

毕设学习笔记整理

  • 说明
    • Python和Pycharm使用方面
      • 因网络问题导致pycharm安装第三方库失败的解决办法
      • 将python程序打包为exe程序
        • pyinstaller
        • py2exe
      • pycharm取消缩进
    • Python函数方面
      • python中 if __name__ == '__main__': 的作用与意义
      • cv2.resize的用法
      • 只读取图像的单通道
      • 数值最值索引
      • 图像增强,数据增广的几种方法
    • matlab中的一些函数
      • numel()
      • tic
      • try/catch语句
      • rand,randn,randi函数
      • conv与convn的区别
      • bsxfun()函数
      • gzeros()
      • floor()
      • max()函数
      • B = ceil(A)
      • 调用GPU初始化数据&将数据拷贝到GPU
      • 把GPU上的数据回传给CPU-——-使用gather函数
      • 对比CPU和GPU两种方式哪种快?
      • 保存指定变量到.mat文件

说明

毕设学习笔记整理,涉及python和matlab,部分资料已上传,有其他需要可以私信我。

Python和Pycharm使用方面

因网络问题导致pycharm安装第三方库失败的解决办法

在终端中使用pip安装,选用国内的资源链接。
比如:安装lxml库和requests库
输入:

pip install -i https://pypi.douban.com/simple lxml
pip install -i https://pypi.douban.com/simple requests

注:其他库未尝试,以上两个亲测速度飞快

将python程序打包为exe程序

pyinstaller

1、安装pyinstaller
2、输入命令:

pyinstaller  -F  **\**\**.py

如图里标黄所示,-F 后面内容为你想打包的python文件。
3、查找自己打包的exe文件需要在dist文件夹下查找。
参考

py2exe

py2exe 似乎只能支持 python3.3 和 pyhton3.4
参考

pycharm取消缩进

pycharm编辑器的缩进和取消缩进快捷键:
整体缩进:
tab
整体取消缩进:
tab+shift

Python函数方面

python中 if name == ‘main’: 的作用与意义

作用是以下程序只运行在主程序中,即当该程序作为子程序import到其他程序中时,以下程序不运行。

cv2.resize的用法

img_new = cv2.resize(img, crop_size, interpolation=cv2.INTER_CUBIC)
# CV_INTER_NN - 最近邻插值,  
# CV_INTER_LINEAR - 双线性插值 (缺省使用)  
# CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..  
# CV_INTER_CUBIC - 立方插值. 保留图像边缘与对比度。

注:不能存在中文路径,此处错误大多为文件路径造成。

只读取图像的单通道

法1:PIL

from PIL import Image
pil_im = Image.open('empire.jpg').convert('L')	# 转为灰度图像

法2:cv2

import cv2
img = cv2.imread(jpg_name, cv2.IMREAD_GRAYSCALE)

数值最值索引

max()函数有一个应用很巧妙的参数key,在这里定义为operator.itemgetter(1),表示对enumerate(x)每个元素的第一维做比较(从0维开始),然后返回第一维值最大的元素,即包含索引和数值。

x = [3, 2.2, 7.4, 6, 4]
min_index, min_number = min(enumerate(x), key=operator.itemgetter(1))
# min_index=1,  min_number =2.2max_index, max_number = max(enumerate(x), key=operator.itemgetter(1))
# max_index=2,  max_number = 7.4

参考

图像增强,数据增广的几种方法

考虑到本课题图像的特殊性,不能进行几何变换,因此这里只用了几种色彩变换的方法。

from PIL import Image, ImageEnhance, ImageOps, ImageFile
import matplotlib.pyplot as plt
jpg_name = 'PVC_module_remove_1.jpg'
pil_im = Image.open(jpg_name).convert('L') # 打开单通道(转为灰度图像)# # 调整图像的饱和度 Color
# random_factor = np.random.randint(10, 31) / 10.  # 随机因子
# image_enhance_1 = ImageEnhance.Color(pil_im).enhance(random_factor)  # 调整图像的饱和度# 调整图像的亮度 Brightness
random_factor_2 = np.random.randint(10, 21) / 10.  # 随机因子
image_enhance_2 = ImageEnhance.Brightness(pil_im).enhance(random_factor_2)  # 调整图像的亮度# 调整图像的对比度 Contrast
random_factor_3 = np.random.randint(10, 21) / 10.  # 随机因子
image_enhance_3 = ImageEnhance.Contrast(pil_im).enhance(random_factor_3)  # 调整图像对比度# 调整图像锐度 Sharpness
random_factor_4 = np.random.randint(0, 31) / 10.  # 随机因子
image_enhance_4 = ImageEnhance.Sharpness(pil_im).enhance(random_factor_4)  # 调整图像锐度# 调整图像亮度、对比度、锐度
random_factor_5_reg = np.random.randint(10, 21) / 10.  # 随机因子
image_enhance_5_reg = ImageEnhance.Contrast(image_enhance_2).enhance(random_factor_5_reg)  #
random_factor_5 = np.random.randint(0, 31) / 10.  # 随机因子
image_enhance_5 = ImageEnhance.Sharpness(image_enhance_5_reg).enhance(random_factor_5)  # 调整图像锐度# 是否有变化?
# changes1 = np.asarray(image_enhance_1) - np.asarray(pil_im)
changes2 = np.asarray(image_enhance_2) - np.asarray(pil_im)
changes3 = np.asarray(image_enhance_3) - np.asarray(pil_im)
changes4 = np.asarray(image_enhance_4) - np.asarray(pil_im)# 添加高斯噪声
# 噪声扰动
image_enhance_6 = add_gaussian_noise(pil_im, 30)# 显示
plt.figure("原图像")
plt.imshow(pil_im, cmap=plt.cm.gray)
# plt.show()
# plt.figure("调整图像的饱和度")
# plt.imshow(image_enhance_1,cmap=plt.cm.gray)
# plt.show()
plt.figure("调整图像的亮度")
plt.imshow(image_enhance_2, cmap=plt.cm.gray)
# plt.show()
plt.figure("调整图像的对比度")
plt.imshow(image_enhance_3, cmap=plt.cm.gray)
# plt.show()
plt.figure("调整图像的锐度")
plt.imshow(image_enhance_4, cmap=plt.cm.gray)plt.figure("调整图像亮度、对比度、锐度")
plt.imshow(image_enhance_5, cmap=plt.cm.gray)plt.figure("添加噪声扰动后的图像")
plt.imshow(image_enhance_6, cmap=plt.cm.gray)
# plt.show()plt.figure("changes4")
plt.imshow(changes4, cmap=plt.cm.gray)
plt.show()# 保存图像不留空白显示,保存
plt.xticks([]), plt.yticks([])  # 隐藏x、y轴
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
plt.margins(0, 0)
plt.imshow(img2,cmap=plt.cm.gray)
plt.show()

伽马校正

def adjust_gamma(image):image_reg = np.array(image)random_factor = np.random.uniform(0.5, 1.5)  # 随机因子img1 = np.power(image_reg / float(np.max(image_reg)), random_factor)return img1

程序下载链接

matlab中的一些函数

numel()

获取数组(结构体)中的元素数量
例如:num = numel(cnn.layer);

tic

通常与toc连用,计算程序运行时间。

try/catch语句

try的作用是让Matlab尝试执行一些语句, 执行过程中如果出错, 则执行catch部分的语句.
其语法:

try  
尝试执行的语句块;  
catch  
出错后执行的语句块;  
end

例如:

tryc = gpuArray(rand(varargin{:}));
catchc = rand(varargin{:});
end

rand,randn,randi函数

1,rand 生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:
rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数

2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样

3,randi 生成均匀分布的伪随机 整数
主要语法:
randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵

conv与convn的区别

conv只适用于两个一维信号的卷积运算
convn适合多维卷积运算;
例如:20 * 20 * 100 * 20与2 * 2卷积运算10 * 10 * 100 * 20
%full : 就是普通意义下的卷积
% same: 就是 和卷积输入的长度一样
% valid : 就是 卷积反转对齐之后,这里的对齐很特殊,不能有填充0;

bsxfun()函数

C = bsxfun(fun,A,B)使由函数句柄fun指定的逐元素二进制操作适用于数组A和B,并启用了单例扩展。
fun可以是以下内置功能之一:

语法功能
@plusPlus
@minusMinus times .Array multiply
@rdivideRight array divide
@ldivideLeft array divide
@powerArray power
@maxBinary maximum
@minBinary minimum
@renRemainder after division
@modModulus after division
@atan2Four quadrant inverse tangent
@hypotSquare root of sum of squares
@eqEqual
@heNot equal
@ltLess than
@leLess than or equal to
@ptGreater than
@geGreater than or equal to
@andElement-wise logical AND
@orElement-wise logical OR
@sorLogical exclusive OR

gzeros()

return zeros array on GPU

floor()

floor函数:朝负无穷大方向取整
y = floor(x) 函数将x中元素取整,值y为不大于本身的最大整数。对于复数,分别对实部和虚部取整

max()函数

c = max(A) 返回A中的最大元素
[C,I] = max(data_array); 返回A中的最大元素赋值给C,将A中的最大元素的位置赋值给I.

B = ceil(A)

返回(对于每一个A中元素)不小于(>=)的值

调用GPU初始化数据&将数据拷贝到GPU

N = 6;
M = magic(N);%在CPU生成数组
G = gpuArray(M); %将数据从CPU拷贝到GPU

A = zeros(10, 'gpuArray');

把GPU上的数据回传给CPU-——-使用gather函数

最后是如何把GPU上的数据回传给CPU:
B = gather (A);
其中A是GPU上的数据,B是CPU上的数据。B的内容在回传之后等于A。

对比CPU和GPU两种方式哪种快?

%%
clc
clear all% %% 首先以200*200的矩阵做加减乘除做比较
% t = zeros(1,100);
% A = rand(200,200);B = rand(200,200);C = rand(200,200);
% for i=1:100
%     tic;
%     D=A+B;E=A.*D;F=B./(E+eps);
%     t(i)=toc;
% end;
% t_m = mean(t);
% fprintf('CPU平均运行时间:%4f\n',t_m);
% %%%%ans = 2.4812e-04
% 
% t1 = gpuArray(zeros(1,100));
% A1 = gpuArray(rand(200,200));
% B1 = gpuArray(rand(200,200));
% C1 = gpuArray(rand(200,200));
% 
% for i=1:100
%     tic;
%     D1=A1+B1;E1=A1.*D1;F1=B1./(E1+eps);
%     t1(i)=toc;
% end;
% t1_m = mean(t1);
% fprintf('GPU平均运行时间:%4f\n',t1_m);
% fprintf('速度快了%4f倍!\n',t_m / t1_m);
% %% 结果
% % CPU运行时间:0.000290
% % GPU平均运行时间:0.000429
% % 速度快了0.675780倍!%% 然后将矩阵大小提高到2000*2000做实验t = zeros(1,100);
A = rand(2000,2000);B = rand(2000,2000);C = rand(2000,2000);
for i=1:100tic;D=A+B;E=A.*D;F=B./(E+eps);t(i)=toc;
end;
t_m = mean(t);
fprintf('CPU平均运行时间:%4f\n',t_m);t1 = gpuArray(zeros(1,100));
A1 = gpuArray(rand(2000,2000));
B1 = gpuArray(rand(2000,2000));
C1 = gpuArray(rand(2000,2000));for i=1:100tic;D1=A1+B1;E1=A1.*D1;F1=B1./(E1+eps);t1(i)=toc;
end;
t1_m = mean(t1);
fprintf('GPU平均运行时间:%4f\n',t1_m);
fprintf('速度快了%4f倍!\n',t_m / t1_m);
%% 结果
% CPU平均运行时间:0.025320
% GPU平均运行时间:0.000747
% 速度快了33.911511倍! 

垃圾笔记本太可怜了!运算次数少CPU快,次数多GPU快!

保存指定变量到.mat文件

fileDir = '文件路径/'; % 保存文件的路径
savePath = strcat(fileDir, num2str(1), '_result.mat'); % 拼接路径和文件名
% num2str(n) 在循环中可以生成1_result.mat, 2_result.mat....
% 拼接后的文件为 : 文件路径/1_result.mat
save(savePath, 'val1', 'val2'); % 保存变量val1,val2到1_result.mat中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与Maven的集成测试

用Maven实施单元测试是很普通的事情,我们大多数人都熟悉项目结构以及单元测试所在的位置。 但是,集成测试是一种不同的情况,大多数情况下它们具有完全不同的要求。 例如,可以让您的单元测试在内存数据库中的h2上运行,…

通信原理-通信系统的组成

第一章 通信系统的组成 1、通信系统一般模型 发送设备:将信源产生的原始电信号变换成适合在信道中传输的形式。变换方式有调制、放大、滤波、编码、多路复用等。 信道:传输信号的通道.即传输媒质。在给子信号通道的同时,信道也会对信号产生损…

使用log4j2免费分配日志记录

介绍 最近,我正在为一个客户端工作,试图为大型精心制作的Java系统消除一些GC暂停。 经过分析后,我意识到大部分垃圾都是通过日志记录产生的! 是否有一种简单的方法来删除所有分配? 原来有:) 我应该使用哪个框架进行GC…

Verilog中fork...join 的用法

特点 中间的语句并行执行;(延时不累加) 不能用于综合; 代码 module signal_gen; reg wave; parameter cycle 5; initial beginforkwave 0;#(cycle) wave 1;#(2*cycle) wave 0;#(3*cycle) wave 1;#(4*cycle…

使用JWT的Cloud Native应用程序

本机云应用程序是为云计算环境开发的应用程序。 对于“ 什么是云原生应用程序 ”这个问题没有具体答案,但是必须满足不同的概念。 在我看来,最重要的功能之一就是能够快速缩放 。 这意味着我们的应用程序在每台服务器上都无法具有任何状态,…

stackexchange_通过Spring Social发推StackExchange问​​题

stackexchange1.简介 这是有关小型辅助项目的第三篇也是最后一篇文章-该机器人自动在专用帐户上发布来自各个Q&A StackExchange网站上的问题的推文(文章末尾的完整列表)。 第一篇文章讨论了为StackExchange REST API构建简单的客户端 。 在第…

使用JCache缓存方法结果

在JCache中,有一个方便的功能可以透明地缓存方法的结果。 您可以使用CacheResult注释托管bean的方法,并且将再次返回第一次调用的结果,而无需再次调用实际方法。 import javax.cache.annotation.CacheResult; // ...public class Calculator…

开源项目GoodView点赞效果

点赞1效果: GoodView方法: 使用GoodView的Demo: public class MainActivity extends Activity { Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main)final Good…

开源RefreshListView下拉刷新效果

1、AnimationDrawable java.lang.Object ↳android.graphics.drawable.Drawable ↳android.graphics.drawable.DrawableContainer ↳android.graphics.drawable.AnimationDrawable 文档概述:An object used to create frame-by-frame animations, defined …

Neo4j:遍历查询超时

在过去的几周中,我一直在花一些业余时间来创建一个应用程序,该应用程序从Open Roads数据生成运行路线-当然已转换并导入到Neo4j中! 我创建了一个用户定义的过程,该过程结合了几个最短路径查询,但是如果它们花费的时间…

View的三大流程之View的测量

1、public class View extends Objectimplements Drawable.Callback KeyEvent.Callback AccessibilityEventSourcejava.lang.Object ↳android.view.View Class Overview This class represents the basic building block for user interface components. A View occupies a …

使用LayoutParams设置布局

1、public static class ViewGroup.LayoutParams extends Objectjava.lang.Object ↳android.view.ViewGroup.LayoutParams Class Overview LayoutParams are used by views to tell their parents how they want to be laid out. LayoutParams是ViewGroup的一个内部类, 每个…

记录意外的开关选项

Java开发人员可以做很多事情来使自己的生活以及维护该代码的其他人的生活更加轻松。 在本文中,我将探讨开发人员可以采用的一种非常简单的方法,以使每个人都更轻松。 这篇文章的要点对于每个阅读它的人来说似乎都是显而易见的,但是我发现这样…

View的绘制

1、当测量好一个View后就可以重写onDraw()方法,并在Canvas对象上绘制所需的图形。 public class Canvas extends Objectjava.lang.Object ↳android.graphics.Canvas Public ConstructorsCanvas()Construct an empty raster canvas.Canvas(Bitmap bitmap)Construc…

ViewGroup的测量及绘制

1、ViewGroup的测量public abstract class ViewGroup extends Viewimplements ViewManager ViewParent java.lang.Object ↳android.view.View ↳android.view.ViewGroup Class Overview A ViewGroup is a special view that can contain other views (called children.)…

ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)

ejb 2.0 3.0这篇文章将讨论使用批注定义EJB视图的可能方法(最后我将只提到使用EJB部署描述符)。我将重点介绍最新的EJB 3.1视图,这些视图将省略旧的本地,远程和本地接口。 因此,我们可以选择: 远程业务界面…

View的事件分发机制简述

要分析的对象就是MotionEvent,点击事件的事件分发其实就是对MotionEvent事件的分发过程,当MotionEvent产生后,系统需要把这个事件传递给一个具体的View,这个传递过程就是分发过程。这个过程由三个很重要的方法共同完成&#xff1a…

ListView的使用用ViewHolder提升效率

public class ListView extends AbsListViewjava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.AdapterView<T extends android.widget.Adapter> ↳android.widget.AbsListView ↳android.widget.ListView Class Ove…

通过投影增强数据模型

介绍 数据模型可能很棘手。 建模可能会更加困难。 有时候&#xff0c;应该放入数据库表中的信息不一定是我们要在每段代码中使用的信息。 和其他许多次一样&#xff0c;Spring来了。 一个称为投影的小功能可以帮助我们在普通界面中仅用几行数据映射数据。 在本文中&#xff0…

ListView常用属性、方法

1、设置item间分割线&#xff0c;分割线高度 android:divider"android:color/darker_gray" android:dividerHeight"10dp" 分割线不仅仅可以设置为一个颜色&#xff0c;也可以设置为一个图片资源。 分割线设置为透明&#xff1a; android:divider"…