本文目錄一覽:
用C語言設計一個簡單計算器
#includestdio.h?
void?add(int?a,int?b,int?c)?
{?
?c=a+b;?
?printf("%d\t",c);?
?printf("\n");?
}?
void?minus(int?a,int?b,int?c)?
{?
?c=a-b;?
?printf("%d\t",c);?
?printf("\n");?
}?
void?multiplication(int?a,int?b,int?c)?
{?
?c=a*b;?
?printf("%d\t",c);?
?printf("\n");?
}?
void?div(int?a,int?b,int?c)?
{?
?c=(float)a/(float)b;?
?printf("%f\t",c);?
?printf("\n");?
}?
main()?
{?
?int?a,b,c;?
?char?p;?
?puts("input?A:\n");?
?scanf("%d",a);?
?puts("input?B:\n");?
?scanf("%d",b);?
?puts("input?operation:\n");?
?getchar();?
?p=getchar();?
?if(p=='+')?add(a,b,c);else?
??if(p=='-')?minus(a,b,c);else?
???if(p=='*')?multiplication(a,b,c);else?
????if(p=='/')?div(a,b,c);else?
?????puts("沒有注冊這個運算符號\n");?
}
以上是設計的一個簡易計算器。可以進行相應的加減乘除。
簡介:
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie于1972年推出,1978年后,C語言已先后被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟件開發上,而且各類科研都需要用到C語言,適于編寫系統軟件,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
MMsegmentation教程 6: 自定義運行設定
我們已經支持 PyTorch 自帶的所有優化器,唯一需要修改的地方是在配置文件里的 optimizer 域里面。
例如,如果您想使用 ADAM (注意如下操作可能會讓模型表現下降),可以使用如下修改:
為了修改模型的學習率,使用者僅需要修改配置文件里 optimizer 的 lr 即可。
使用者可以參照 PyTorch 的 API 文檔
直接設置參數。
一個自定義的優化器可以按照如下去定義:
假如您想增加一個叫做 MyOptimizer 的優化器,它的參數分別有 a , b , 和 c 。
您需要創建一個叫 mmseg/core/optimizer 的新文件夾。
然后再在文件,即 mmseg/core/optimizer/my_optimizer.py 里面去實現這個新優化器:
為了讓上述定義的模塊被框架發現,首先這個模塊應該被導入到主命名空間 (main namespace) 里。
有兩種方式可以實現它。
mmseg.core.optimizer.my_optimizer 模塊將會在程序運行的開始被導入,并且 MyOptimizer 類將會自動注冊。
需要注意只有包含 MyOptimizer 類的包 (package) 應當被導入。
而 mmseg.core.optimizer.my_optimizer.MyOptimizer 不能 被直接導入。
事實上,使用者完全可以用另一個按這樣導入方法的文件夾結構,只要模塊的根路徑已經被添加到 PYTHONPATH 里面。
之后您可以在配置文件的 optimizer 域里面使用 MyOptimizer
在配置文件里,優化器被定義在 optimizer 域里,如下所示:
為了使用您自己的優化器,這個域可以被改成:
有些模型可能需要在優化器里有一些特別參數的設置,例如 批歸一化層 (BatchNorm layers) 的 權重衰減 (weight decay)。
使用者可以通過自定義優化器的構造器去微調這些細粒度參數。
默認的優化器構造器的實現可以參照 這里 ,它也可以被用作新的優化器構造器的模板。
優化器沒有實現的一些技巧應該通過優化器構造器 (optimizer constructor) 或者鉤子 (hook) 去實現,如設置基于參數的學習率 (parameter-wise learning rates)。我們列出一些常見的設置,它們可以穩定或加速模型的訓練。
如果您有更多的設置,歡迎在 PR 和 issue 里面提交。
我們根據默認的訓練迭代步數 40k/80k 來設置學習率,這在 MMCV 里叫做 PolyLrUpdaterHook 。
我們也支持許多其他的學習率計劃表: 這里 ,例如 CosineAnnealing 和 Poly 計劃表。下面是一些例子:
工作流是一個專門定義運行順序和輪數 (running order and epochs) 的列表 (phase, epochs)。
默認情況下它設置成:
意思是訓練是跑 1 個 epoch。有時候使用者可能想檢查模型在驗證集上的一些指標(如 損失 loss,精確性 accuracy),我們可以這樣設置工作流:
于是 1 個 epoch 訓練,1 個 epoch 驗證將交替運行。
注意 :
如果鉤子已經在 MMCV 里被實現,如下所示,您可以直接修改配置文件來使用鉤子:
以下的常用的鉤子沒有被 custom_hooks 注冊:
在這些鉤子里,只有 logger hook 有 VERY_LOW 優先級,其他的優先級都是 NORMAL 。
上述提及的教程已經包括了如何修改 optimizer_config , momentum_config 和 lr_config 。
這里我們展示我們如何處理 log_config , checkpoint_config 和 evaluation 。
MMCV runner 將使用 checkpoint_config 去初始化 CheckpointHook .
使用者可以設置 max_keep_ckpts 來僅保存一小部分檢查點或者通過 save_optimizer 來決定是否保存優化器的狀態字典 (state dict of optimizer)。 更多使用參數的細節請參考 這里 。
log_config 包裹了許多日志鉤 (logger hooks) 而且能去設置間隔 (intervals)。現在 MMCV 支持 WandbLoggerHook , MlflowLoggerHook 和 TensorboardLoggerHook 。
詳細的使用請參照 文檔 。
evaluation 的配置文件將被用來初始化 EvalHook 。
除了 interval 鍵,其他的像 metric 這樣的參數將被傳遞給 dataset.evaluate() 。
錐套的介紹
錐套是一種歐美國家普遍使用的新型機械傳動聯接部件,具有標準化程度高、精度高、結構緊湊、安裝拆卸方便等特點。通過8度外錐面與皮帶輪、鏈輪及其他傳動件內錐面壓緊聯接,使各種傳動件的定心精度大大提高。錐套尺寸為系列標準設計。其內孔鍵槽按ISO標準加工。通用性互換性很好,適用各種場合. 當傳動件經過長時間運轉時,內孔及鏈槽就可能發生損壞,如果是使用這種錐套的傳動件,發生這種情況時,只需更換同一規格錐套就可以恢復使用。因而大大提高傳動件使用壽命,降低維修費用,節省時間。
Matlab調用IE并根據錄入內容然后搜索
function RandDisplayJiong
axis off; %隱去坐標軸
set(gcf,'menubar','none','toolbar','none');%不顯示當前figure 菜單欄和工具欄
for k = 1:100 %循環100次
%每次在(rand,rand)這個隨機的位置,以20到50之間隨機分布的一個數為字體大小,隸書的形式,
%隨機生成RGB顏色,并隨機旋轉一定角度來顯示“囧”
h = text(rand,rand,...
['\fontsize{',num2str(unifrnd(20,50)),'}\fontname {隸書} 囧'],...
'color',rand(1,3),'Rotation',360*rand);
pause(0.2); %每顯示完一次暫停0.2秒
end
function T = cat_in_holl(n)
T = zeros(1,n);
for k = 1:n
c = unidrnd(3,1);
while c ~= 1
if c == 2
T(k) = T(k)+4;
else
T(k) = T(k)+6;
end
c = unidrnd(3,1);
end
T(k) = T(k)+2;
end
function example2_3_6slow
A = unidrnd(100,1000000,7);%隨機生成1000000*7的A矩陣,A的元素屬于1到100的整數
B = zeros(1000000,3);
for m = 1:1000000
a = A(m,:);
b = [4 6 8];
for ii = 1:3
dd = a(a==b(ii));%dd:a中等于b(ii)的元素
if isempty(dd)==0 %dd不為空
b(ii)=0;
end
end
B(m,:)=b;
end
function [m,n,TT]=plot3dnmT(N,L)
%N:inf的近似,L:[0,2]區間的剖分個數
C=zeros(N,1);%nested-function:Tmn=calcT(mm,nn)中用來存儲計算結果
m=linspace(0,2,L);
[m,n]=meshgrid(m,m);
TT=zeros(size(n));%和網格數據m,n對應的計算出來的T(m,n)網格數據
for ii=1:L
for jj=1:L
TT(ii,jj)=calcT(m(ii,jj),n(ii,jj));
end
end
%=====計算T(m,n)的nest-function
function Tmn=calcT(mm,nn)
for N1=1:N
C(N1)=(mm^N1/gamma(N1+1))*sum( nn.^(0:N1-1)./gamma(1:N1) );
Tmn=1.0-exp(-mm-nn)*sum(C);
end
end
mesh(n,m,TT);
end
function [mx,minf]=randwalk(f,x,lamda,epsilon,N)
%隨機行走法求函數的極小值。輸入f為所求函數的句柄,
%x為初始值。lamda為步長。epsilon為控制lamda的減小的閾值,即lamda減小到epsilon時
%迭代停止。
%N為為了產生較好點的迭代控制次數。
%函數返回值mx為n次試驗得到的最優解,minf為響應的最優值。
f1 = f(x(1),x(2));
while(lamda=epsilon)
k = 1;
while(k=N)
u = unifrnd(-1,1,1,2);
x1 = x+lamda*(u/norm(u));
f11 = f(x1(1),x1(2));
if f11f1
f1 = f11;
x = x1;
k = 1;
else
k = k+1;
end
end
lamda = lamda/2;
end
mx = x1;
minf = f1;
function triangle_table
fig = figure('defaultuicontrolunits','normalized','name','triangle_table',...
'numbertitle','off','menubar','none');
ah = axes('Pos',[.1 .2 .75 .75],'Visible','off');
slider_h = uicontrol('style','slider','units','normalized','pos',...
[0.1,0.05,0.75,0.05],'sliderstep',[1/6,0.05],'callback',@change_color);
hold on
for k = 0:6
plot(0:6-k,(6-k)*ones(1,(7-k)),'k');
plot(k*ones(1,(7-k)),k:6,'k');
end
plot([0,6],[0,6],'k');
hold off;
for x = 1:5
for y = 1:x
text(y-0.5,x+0.5,num2str(x),'color','k','tag','數字');
end
end
for k = 0:5
text(k+0.1,k+0.5,[num2str(k),'.5'],'tag','數字');
end
%====slider's callback function(nested function)======
function change_color(hObject,eventdata)
v = round(6*get(slider_h,'value'));
num_h = findobj('tag','數字');
num_pos = get(num_h,'pos');
red_num_logic = cellfun(@(x) (x(1)=vx(2)=v),num_pos);
set(num_h(red_num_logic),'color','r');
set(num_h(~red_num_logic),'color','k');
end
end
function DuckLakeSegmentation
%導入圖像文件引導對話框
[filename,pathname,flag] = uigetfile('*.jpg','請導入圖像文件');
Duck = imread([pathname,filename]);
LakeTrainData = [52 74 87;76 117 150;19 48 62;35 64 82;46 58 36;...
50 57 23;110 127 135;156 173 189;246 242 232;...
166 174 151];%從圖上選取的幾個位于湖面區域的有代表的點的RGB值
%從圖上選取的幾個位于鴨子區域的有代表的點的RGB值
DuckTrainData = [211 192 107;202 193 164;32 25 0;213 201 151;115 75 16;...
101 70 0;169 131 22;150 133 87];
%屬于湖的點為0,鴨子為1
group = [zeros(size(LakeTrainData,1),1);ones(size(DuckTrainData,1),1)];
LakeDuckSVM = svmtrain([LakeTrainData;DuckTrainData],group,...
'Kernel_Function','polynomial','Polyorder',2);%訓練得到支持向量分類機
[m,n,k] = size(Duck);
Duck1 = double(reshape(Duck, m*n, k));%將數組Duck轉成m*n行,3列的雙精度矩陣
%根據訓練得到的支持向量機對整個圖像的像素點分類
IndDuck = svmclassify(LakeDuckSVM,Duck1);
IndLake = ~IndDuck;%屬于湖的點的邏輯數組
result = reshape([IndLake, IndLake, IndLake],[m,n,k]);%和圖片的維數相對應
Duck2 = Duck;
Duck2(result) = 0;
figure
imshow(Duck2)
function example12_1_3
%定時器的TimerFun,供TimerA,TimerB,TimerC共用
function TimerFun(object,event)
t = clock; %函數剛開始執行時間點
pause(1);%函數執行了1秒鐘
et = etime(t,get(object,'userdata'));%函數開始運行和上次函數開始運行時間間隔
disp(['本次函數開始執行距上次函數開始執行時間為:',num2str(et),' S!'])
set(object,'userdata',t);%記錄本次函數開始運行時間
end
%定義定時器TimerA, 'executionmode'設為'fixedSpacing'
TimerA = timer('StartFcn','disp(''定時器A開始:'')','ErrorFcn',...
'disp(''A發生錯誤'')','StartDelay',0.5,'TimerFcn',@TimerFun,'stopfcn',...
'disp(''定時器A停止!'')','executionmode','fixedSpacing','period',0.5,...
'TasksToExecute',3);
%定義定時器TimerB, 'executionmode'設為'fixedDelay'
TimerB = timer('StartFcn','disp(''定時器B開始:'')','ErrorFcn',...
'disp(''B發生錯誤'')','StartDelay',0.5,'TimerFcn',@TimerFun,'stopfcn',...
'disp(''定時器B停止!'')','executionmode','fixedDelay','period',0.5,...
'TasksToExecute',3);
%定義定時器TimerC, 'executionmode'設為'fixedRate'
TimerC = timer('StartFcn','disp(''定時器C開始:'')','ErrorFcn',...
'disp(''C發生錯誤'')','StartDelay',0.5,'TimerFcn',@TimerFun,'stopfcn',...
'disp(''定時器C停止!'')','executionmode','fixedRate','period',0.5,...
'TasksToExecute',3);
%運行定時器A
set(TimerA,'userdata',clock);
start(TimerA);
wait(TimerA);
%運行定時器B
set(TimerB,'userdata',clock);
start(TimerB);
wait(TimerB);
%運行定時器C
set(TimerC,'userdata',clock);
start(TimerC);
wait(TimerC);
end