1. 程式人生 > >[轉載]《通過例子學習Lua》系列文章

[轉載]《通過例子學習Lua》系列文章

通過例子學習Lua(1) ---- Hello World

1.前言

偶最近在學習Lua, 所以寫出心得和大家共享, 爭取一天寫一篇, 嘿嘿.
才開始學所以內容很淺, 希望大家包涵.

Lua是一種完全免費的指令碼語言, 可以和C/C++語言緊密結合,
它的官方網站在http://www.lua.org. 在網站上可以下載到lua的原始碼, 沒有可
執行版本, 不過不用擔心, 因為lua原始碼可以在任何一種C/C++的編譯器上編譯.

如果要學習Lua, 官方網站上的Reference是必備的,上面有每個命令的用法,非常詳細。
參考手冊 http://www.lua.org/manual/5.0/
作者寫的Programming in Lua http://www.lua.org/pil/

2.編譯
如果用的VC6, 可以下載所需的project檔案,地址在
http://sourceforge.net/project/showfiles.php?group_id=32250&package_id=115604
VSNET2003可以下載這個sln檔案http://home.comcast.net/~vertigrated/lua/vs7.zip
偶用的是cygwin和linux, 打入以下命令即可,
tar -zxvf lua-5.0.2.tar.gz
cd lua-5.0.2
sh ./configure
make
這樣就OK了。
為了以後使用方便,最好把bin目錄加入到path裡面。

3."Hello, world!"
現在開始偶們的第一個小程式"Hello, world!"
把以下程式打入檔案e01.lua

例1:e01.lua
-- Hello World in Lua 
print("Hello World.")

Lua有兩種執行方式,一種是嵌入到C程式中執行,還有一種是直接從命令列方式下執行。
這裡為了除錯方便,採用第二種方式,執行命令 lua e01.lua

輸出結果應該是:
Hello World.

4.程式說明
第一行 -- Hello World in Lua
這句是註釋,其中--和C++中的//意思是一樣的
第二行 print("Hello World.")
呼叫lua內部命令print,輸出"Hello World."字串到螢幕,Lua中的字串全部是由"括起來的。
這個命令是一個函式的呼叫,print是lua的一個函式,而"Hello World."是print的引數。

5.試試看
在Lua中有不少字串的處理操作,本次的課後試試看的內容就是,找出連線兩個字串的操作,
並且print出來。   
 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(2) --- Lua流程控制

1. 函式的使用
以下程式演示瞭如何在Lua中使用函式, 及區域性變數
例e02.lua
-- functions 
function pythagorean(a, b)     
local c2 = a^2 + b^2     
return sqrt(c2) 
end 
print(pythagorean(3,4))

執行結果
5

程式說明
在Lua中函式的定義格式為:
function 函式名(引數)
...
end
與Pascal語言不同, end不需要與begin配對, 只需要在函式結束後打個end就可以了.
本例函式的作用是已知直角三角形直角邊, 求斜邊長度. 引數a,b分別表示直角邊長,
在函式內定義了local形變數用於儲存斜邊的平方. 與C語言相同, 定義在函式內的代
碼不會被直接執行, 只有主程式呼叫時才會被執行.
local表示定義一個區域性變數, 如果不加local剛表示c2為一個全域性變數, local的作用域
是在最裡層的end和其配對的關鍵字之間, 如if ... end, while ... end等。全域性變數的
作用域是整個程式。

2. 迴圈語句
例e03.lua
-- Loops 
for i=1,5 do     
print("i is now " .. i) 
end

執行結果
i is now 1 
i is now 2 
i is now 3 
i is now 4 
i is now 5

程式說明
這裡偶們用到了for語句
for 變數 = 引數1, 引數2, 引數3 do
迴圈體
end
變數將以引數3為步長, 由引數1變化到引數2
例如:    
for i=1,f(x) do print(i) end
for i=10,1,-1 do print(i) end

這裡print("i is now " .. i)中,偶們用到了..,這是用來連線兩個字串的,
偶在(1)的試試看中提到的,不知道你們答對了沒有。
雖然這裡i是一個整型量,Lua在處理的時候會自動轉成字串型,不需偶們費心。

3. 條件分支語句
例e04.lua
-- Loops and conditionals 
for i=1,5 do
print(“i is now “ .. i)
      if i < 2 then         
      print(“small”)     
      elseif i < 4 then         
      print(“medium”)     
      else         
      print(“big”)     
      end 
end

執行結果
i is now 1 
small 
i is now 2 
medium 
i is now 3 
medium 
i is now 4 
big 
i is now 5 
big

程式說明
if else用法比較簡單, 類似於C語言, 不過此處需要注意的是整個if只需要一個end,
哪怕用了多個elseif, 也是一個end.
例如
    if op == "+" then
      r = a + b
    elseif op == "-" then
      r = a - b
    elseif op == "*" then
      r = a*b
    elseif op == "/" then
      r = a/b
    else
      error("invalid operation")
    end


4.試試看
Lua中除了for迴圈以外, 還支援多種迴圈, 請用while...do和repeat...until改寫本文中的for程式

 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(3) ---- Lua資料結構

1.簡介
Lua語言只有一種基本資料結構, 那就是table, 所有其他資料結構如陣列啦,
類啦, 都可以由table實現.

2.table的下標
例e05.lua
-- Arrays 
myData = {} 
myData[0] = “foo” 
myData[1] = 42 

-- Hash tables 
myData[“bar”] = “baz” 

-- Iterate through the 
-- structure 
for key, value in myData do     
print(key .. “=“ .. value) 
end

輸出結果
0=foo 
1=42 
bar=baz

程式說明
首先定義了一個table myData={}, 然後用數字作為下標賦了兩個值給它. 這種
定義方法類似於C中的陣列, 但與陣列不同的是, 每個陣列元素不需要為相同型別,
就像本例中一個為整型, 一個為字串.

程式第二部分, 以字串做為下標, 又向table內增加了一個元素. 這種table非常
像STL裡面的map. table下標可以為Lua所支援的任意基本型別, 除了nil值以外.

Lua對Table佔用記憶體的處理是自動的, 如下面這段程式碼
    a = {}
    a["x"] = 10
    b = a      -- `b' refers to the same table as `a'
    print(b["x"])  --> 10
    b["x"] = 20
    print(a["x"])  --> 20
    a = nil    -- now only `b' still refers to the table
    b = nil    -- now there are no references left to the table
b和a都指向相同的table, 只佔用一塊記憶體, 當執行到a = nil時, b仍然指向table,
而當執行到b=nil時, 因為沒有指向table的變量了, 所以Lua會自動釋放table所佔記憶體

3.Table的巢狀
Table的使用還可以巢狀,如下例
例e06.lua
-- Table ‘constructor’ 
myPolygon = {     
color=“blue”,     
thickness=2,     
npoints=4;     
{x=0,   y=0},     
{x=-10, y=0},     
{x=-5,  y=4},     
{x=0,   y=4} 
}

-- Print the color 
print(myPolygon[“color”]) 

-- Print it again using dot 
-- notation 
print(myPolygon.color) 

-- The points are accessible 
-- in myPolygon[1] to myPolygon[4] 

-- Print the second point’s x 
-- coordinate 
print(myPolygon[2].x)

程式說明
首先建立一個table, 與上一例不同的是,在table的constructor裡面有{x=0,y=0}, 
這是什麼意思呢? 這其實就是一個小table, 定義在了大table之內, 小table的
table名省略了.
最後一行myPolygon[2].x,就是大table裡面小table的訪問方式.  

 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(4) -- 函式的呼叫

1.不定引數
例e07.lua
-- Functions can take a 
-- variable number of 
-- arguments. 
function funky_print (...)     
for i=1, arg.n do         
print("FuNkY: " .. arg[i])     
end 
end 

funky_print("one", "two")

執行結果
FuNkY: one 
FuNkY: two

程式說明
* 如果以...為引數, 則表示引數的數量不定.
* 引數將會自動儲存到一個叫arg的table中.
* arg.n中存放參數的個數. arg[]加下標就可以遍歷所有的引數.


2.以table做為引數
例e08.lua
-- Functions with table
-- parameters 
function print_contents(t)     
for k,v in t do         
print(k .. "=" .. v)     
end 
end 
print_contents{x=10, y=20}

執行結果
x=10 
y=20

程式說明
* print_contents{x=10, y=20}這句引數沒加圓括號, 因為以單個table為引數的時候, 不需要加圓括號
* for k,v in t do 這個語句是對table中的所有值遍歷, k中存放名稱, v中存放值


3.把Lua變成類似XML的資料描述語言
例e09.lua
function contact(t)     
-- add the contact ‘t’, which is     
-- stored as a table, to a database 
end

contact {     
name = "Game Developer",     
email = "[email protected]",     
url = "http://www.ogdev.net",     
quote = [[         
There are 
10 types of people        
who can understand binary.]] 


contact {     
-- some other contact 
}

程式說明
* 把function和table結合, 可以使Lua成為一種類似XML的資料描述語言
* e09中contact{...}, 是一種函式的呼叫方法, 不要弄混了
* [[...]]是表示多行字串的方法
* 當使用C API時此種方式的優勢更明顯, 其中contact{..}部分可以另外存成一配置檔案

4.試試看
想想看哪些地方可以用到例e09中提到的配置方法呢?  

 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(5) ---- Lua與C互動入門

1.簡介

Lua與C/C++結合是很緊密的, Lua與C++互動是建立在Lua與C的基礎上的, 所
以偶先從Lua與C講起.

正如第一講所說, 執行Lua程式或者說呼叫Lua主要有兩種方式:
* 通過命令列執行"Lua"命令
* 通過Lua的C庫
雖然此前偶們一直用第一種方式, 但偶要告訴你, 通過Lua的C庫執行才是遊戲中
常用的方式.

2.Lua的C庫

Lua的C庫可以做為Shared Library呼叫, 但一般開發遊戲時會把Lua的所有源程式
都包含在內, 並不把Lua編譯成共享庫的形式. 因為Lua程式只有100多K, 而且幾乎
可以在任何編譯器下Clean Compile. 帶Lua源程式的另一個好處時, 可以隨時對Lua
本身進行擴充, 增加偶們所需的功能.

Lua的C庫提供一系列API:
* 管理全域性變數
* 管理tables
* 呼叫函式
* 定義新函式, 這也可以完全由C實現
* 垃圾收集器Garbage collector, 雖然Lua可以自動進行, 但往往不是立即執行的,
  所以對實時性要求比較高的程式, 會自己呼叫垃圾收集器
* 載入並執行Lua程式, 這也可以由Lua自身實現
* 任何Lua可以實現的功能, 都可以通過Lua的C API實現, 這對於優化程式的執行速度
  有幫助. 經常呼叫的共用的Lua程式片斷可以轉成C程式, 以提高效率. 連Lua都是C寫的
  還有什麼C不能實現呢?
  
3.Lua與C整合的例子
例e10.c
/* A simple Lua interpreter. */ 
#include  
#include  
int main(int argc, char *argv[]) {     
char line[BUFSIZ];     
lua_State *L = lua_open(0);     
while (fgets(line, sizeof(line), stdin) != 0)         
lua_dostring(L, line);     
lua_close(L);     
return 0; 
}

編譯
Linux/Cygwin
* 先編譯Lua, 並把標頭檔案放入include路徑
* gcc e10.c -llua -llualib -o e10

VC6/VC2003
* 先編譯Lua, 在Option中設定標頭檔案和庫檔案路徑
* 新建工程,在工程配置中加入附加庫lua.lib和lualib.lib
* 編譯成exe

執行結果
本程式的功能是實現一個Lua直譯器, 輸入的每行字元都會被解釋成Lua並執行.

程式說明
* #include  包含lua標頭檔案, 然後才可以使用API
* lua_State *L = lua_open(0) 開啟一個Lua執行器
* fgets(line, sizeof(line), stdin) 從標準輸入裡讀入一行
* lua_dostring(L, line) 執行此行
* lua_close(L) 關閉Lua執行器


例e11.c
/* Another simple Lua interpreter. */ 
#include  
#include  
#include  
int main(int argc, char *argv[]) {     
char line[BUFSIZ];     
lua_State *L = lua_open(0);     
lua_baselibopen(L);     
lua_iolibopen(L);     
lua_strlibopen(L);     
lua_mathlibopen(L);     
while (fgets(line, sizeof(line), stdin) != 0)         
lua_dostring(L, line);     
lua_close(L);     
return 0; 
}

執行結果
本程式的功能是實現一個Lua直譯器, 輸入的每行字元都會被解釋成Lua並執行.
與上例不同的是, 本例呼叫了Lua的一些標準庫.

程式說明
* #include  包含Lua的標準庫
* 以下這幾行是用來讀入Lua的一些庫, 這樣偶們的Lua程式就可以有更多的功能.
lua_baselibopen(L);     
lua_iolibopen(L);     
lua_strlibopen(L);     
lua_mathlibopen(L); 

4.試試看
把上面兩個小例子在你熟悉的編譯器中編譯執行, 並試試能否與Lua原始碼樹一起編譯  

 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(6) ---- C/C++中用Lua函式

參考英文文件http://tonyandpaige.com/tutorials/lua2.html

1.簡介
偶們這次主要說說怎麼由Lua定義函式, 然後在C或者C++中呼叫. 這裡偶們
暫不涉及C++的物件問題, 只討論呼叫函式的引數, 返回值和全域性變數的使用.

2.
這裡偶們在e12.lua裡先定義一個簡單的add(), x,y為加法的兩個引數,  
return 直接返回相加後的結果.

例e12.lua
-- add two numbers
function add ( x, y )
return x + y
end

在前一次裡, 偶們說到 lua_dofile() 可以直接在C中執行lua檔案. 因為偶們
這個程式裡只定義了一個add()函式, 所以程式執行後並不直接結果, 效果相當
於在C中定義了一個函式一樣.

Lua的函式可以有多個引數, 也可以有多個返回值, 這都是由棧(stack)實現的.
需要呼叫一個函式時, 就把這個函式壓入棧, 然後順序壓入所有引數, 然後用
lua_call()呼叫這個函式. 函式返回後, 返回值也是存放在棧中. 這個過程和
彙編執行函式呼叫的過程是一樣的.

例e13.cpp 是一個呼叫上面的Lua函式的例子
#include 

extern "C" { // 這是個C++程式, 所以要extern "C",
     // 因為lua的標頭檔案都是C格式的
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/* the Lua interpreter */
lua_State* L;

int luaadd ( int x, int y )
{
int sum;

/* the function name */
lua_getglobal(L, "add");

/* the first argument */
lua_pushnumber(L, x);

/* the second argument */
lua_pushnumber(L, y);

/* call the function with 2
   arguments, return 1 result */
lua_call(L, 2, 1);

/* get the result */
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);

return sum;
}

int main ( int argc, char *argv[] )
{
int sum;

/* initialize Lua */
L = lua_open();

/* load Lua base libraries */
lua_baselibopen(L);

/* load the script */
lua_dofile(L, "e12.lua");

/* call the add function */
sum = luaadd( 10, 15 );

/* print the result */
printf( "The sum is %d/n", sum );

/* cleanup Lua */
lua_close(L);

return 0;
}

程式說明:
main中過程偶們上次已經說過了, 所以這次只說說luaadd的過程
* 首先用lua_getglobal()把add函式壓棧
* 然後用lua_pushnumber()依次把x,y壓棧
* 然後呼叫lua_call(), 並且告訴程式偶們有兩個引數一個返回值
* 接著偶們從棧頂取回返回值, 用lua_tonumber()
* 最後偶們用lua_pop()把返回值清掉

執行結果:
The sum is 25

編譯方法
Linux下把程式存成e13.cpp
g++ e13.cpp -llua -llualib -o e13
./e13

VC下編譯方法
* 首先建立一個空的Win32 Console Application Project
* 把e13.cpp加入工程中
* 點project setting,然後設定link選項, 再加上lua.lib lualib.lib兩個額外的庫
* 最後編譯

建立好的project可以在這裡下載
VC http://tonyandpaige.com/tutorials/luaadd.zip
Linux http://tonyandpaige.com/tutorials/luaadd.tar.gz

3.全域性變數
上面偶們用到了lua_getglobal()但並沒有詳細講, 這裡偶們再舉兩個小例子來說下全域性變數
lua_getglobal()的作用就是把lua中全域性變數的值壓入棧
lua_getglobal(L, "z");
z = (int)lua_tonumber(L, 1);
lua_pop(L, 1);
假設Lua程式中定義了一個全域性變數z, 這段小程式就是把z的值取出放入C的變數z中.

另外Lua中還有一個對應的函式lua_setglobal(), 作用是用棧頂的值填充指定的全域性變數
lua_pushnumber(L, 10);
lua_setglobal(L, "z");
例如這段小程式就是把lua中的全域性變數z設為10, 如果lua中未定義z的話, 就會自動建立一個
全域性變數z並設為10.

4.試試看
自己寫個函式用C/C++來呼叫下試試

 //-----------------------------------------------------------------------------------------------------------------------------------------------

通過例子學習Lua(7) ---- Lua中呼叫C/C++函式

1.前言
上次偶說到從C/C++中呼叫Lua的函式, 然後就有朋友問從Lua中如何呼叫C/C++的
函式, 所以偶們這次就來說說這個問題. 首先偶們會在C++中建立一個函式, 然後
告知Lua有這個函式, 最後再執行它. 另外, 由於函式不是在Lua中定義的, 所以
無法確定函式的正確性, 可能在呼叫過程中會出錯, 因此偶們還會說說Lua出錯處
理的問題.

2.Lua中呼叫C函式
在lua中是以函式指標的形式呼叫函式, 並且所有的函式指標都必須滿足如下此種
型別:
typedef int (*lua_CFunction) (lua_State *L);

也就是說, 偶們在C++中定義函式時必須以lua_State為引數, 以int為返回值才能
被Lua所呼叫. 但是不要忘記了, 偶們的lua_State是支援棧的, 所以通過棧可以
傳遞無窮個引數, 大小隻受記憶體大小限制. 而返回的int值也只是指返回值的個數
真正的返回值都儲存在lua_State的棧中. 偶們通常的做法是做一個wrapper, 把
所有需要呼叫的函式都wrap一下, 這樣就可以呼叫任意的函數了. 

下面這個例子是一個C++的average()函式, 它將展示如何用多個引數並返回多個值

例e14.cpp
#include 

extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/* the Lua interpreter */
lua_State* L;

static int average(lua_State *L)
{
/* get number of arguments */
int n = lua_gettop(L);
double sum = 0;
int i;

/* loop through each argument */
for (i = 1; i <= n; i++)
{
/* total the arguments */
sum += lua_tonumber(L, i);
}

/* push the average */
lua_pushnumber(L, sum / n);

/* push the sum */
lua_pushnumber(L, sum);

/* return the number of results */
return 2;
}

int main ( int argc, char *argv[] )
{
/* initialize Lua */
L = lua_open();

/* load Lua base libraries */
lua_baselibopen(L);

/* register our function */
lua_register(L, "average", average);

/* run the script */
lua_dofile(L, "e15.lua");

/* cleanup Lua */
lua_close(L);

return 0;
}

例e15.lua
-- call a C++ function

avg, sum = average(10, 20, 30, 40, 50)

print("The average is ", avg)
print("The sum is ", sum)


程式說明:
* lua_gettop()的作用是返回棧頂元素的序號. 由於Lua的棧是從1開始編號的,
  所以棧頂元素的序號也相當於棧中的元素個數. 在這裡, 棧中元素的個數就
  是傳入的引數個數.
* for迴圈計算所有傳入引數的總和. 這裡用到了數值轉換lua_tonumber().
* 然後偶們用lua_pushnumber()把平均值和總和push到棧中.
* 最後, 偶們返回2, 表示有兩個返回值.
* 偶們雖然在C++中定義了average()函式, 但偶們的Lua程式並不知道, 所以需
  要在main函式中加入
  
   /* register our function */
lua_register(L, "average", average);

  這兩行的作用就是告訴e15.lua有average()這樣一個函式.
* 這個程式可以存成cpp也可以存成c, 如果以.c為副檔名就不需要加extern "C"

編譯的方法偶們上次說過了, 方法相同.
e15.lua執行的方法只能用上例中的C++中執行, 而不能用命令列方式執行.

3.錯誤處理
在上例中, 偶們沒有對傳入的引數是否為數字進行檢測, 這樣做不好. 所以這裡偶
們再加上錯誤處理的片斷.

把這段加在for迴圈之內:
if (!lua_isnumber(L, i)) {
lua_pushstring(L, "Incorrect argument to 'average'");
lua_error(L);
}
這段的作用就是檢測傳入的是否為數字.

加上這段之後, 偶們debug的時候就會簡單許多. 對於結合兩種語言的程式設計, 它們之
間傳遞資料的正確性檢測是非常重要的. 

這裡有別人寫好的例子:
VC的 http://tonyandpaige.com/tutorials/luaavg.zip
Linux的 http://tonyandpaige.com/tutorials/luaavg.tar.gz

至此, Lua與C的結合就基本講完了, 下次偶要開始說說Lua與面向物件.
但是偶自己還沒有學完, 所以大家可能要多等兩天了. Sorry!

相關推薦

[轉載]《通過例子學習Lua系列文章

通過例子學習Lua(1) ---- Hello World1.前言偶最近在學習Lua, 所以寫出心得和大家共享, 爭取一天寫一篇, 嘿嘿.才開始學所以內容很淺, 希望大家包涵.Lua是一種完全免費的指令碼語言, 可以和C/C++語言緊密結合,它的官方網站在http://ww

通過例子學習Lua

據說本文作者是OGDEV的HACK達人 通過例子學習Lua(1) ---- Hello World 1.前言 遊戲中少不了用到指令碼語言. Lua是一種和C/C++結合非常緊密的指令碼語言,效率極高。 一般是對時間要求比較高的地方用C++寫,而經常需要改動的地方用Lua寫。 偶最

轉載】《零基礎入門深度學習系列文章(教程+程式碼)

轉自:https://blog.csdn.net/TS1130/article/details/53244576 無論即將到來的是大資料時代還是人工智慧時代,亦或是傳統行業使用人工智慧在雲上處理大資料的時代,作為一個有理想有追求的程式設計師,不懂深度學習(Deep Learning)這個超熱的技

Hadoop學習筆記系列文章導航

集群 影子 1.5 .com 日誌分析 尋找 思想 硬件 力量 一、為何要學習Hadoop?   這是一個信息爆炸的時代。經過數十年的積累,很多企業都聚集了大量的數據。這些數據也是企業的核心財富之一,怎樣從累積的數據裏尋找價值,變廢為寶煉數成金成為當務之急。但數據增長的速

[教程預告]lua系列文章通知

最近一直在做關於指令碼方面的東西,所以就想寫一寫關於自己對指令碼這塊東西的小見解。腳本系統在一個遊戲中發揮的作用個人覺得非常巨大,比如遊戲中的任務,活動,AI,玩法等等很多東西都要用指令碼來控制。指令碼對遊戲的可玩性和多玩性做了很大的貢獻。指令碼語言可謂種類繁多,比如lua, perl, python, 甚至

學習OpenCV系列文章一:顯示影象

首先對於OpenCV的安裝,請各位讀者自行google或百度,相信會有很多指導文章的。但更推薦OpenCV官方的指導: 本例執行在linux系統下,預設大家的環境都已經搭好了,好了,現在開始進入正文。 OpenCV開發庫提供了讀取各種型別影象檔案,視訊或攝像機輸入的功

通過例子學習rtmpdump

原文地址:http://pclosmag.com/html/Issues/201104/page19.html 強烈建議習慣英文者,ctrl+按住上面連結,跳轉。 RTMP Specification: http://www.adobe.com/devnet/rtmp.

通過例子學習ABAP(四)--INSERT語句對於三種類型的內表不同效果

(1)  通過索引插入行: INSERT LINE INTO ITAB INDEX IDX. (2)一般性的插入單行:INSERT [LINE INTO | INITIAL LINE INTO ] TABLE ITAB. 語句中增加了TABLE關鍵字,對於不同型別的內表,其意

通過例子學習Rust之 1 Hello World

1 Hello World 世界,你好。 This is the source code of the traditional Hello World program. 這是傳統的Hello World的原始碼。 // This is a comme

[轉]《零基礎入門深度學習系列文章(教程+程式碼)

無論即將到來的是大資料時代還是人工智慧時代,亦或是傳統行業使用人工智慧在雲上處理大資料的時代,作為一個有理想有追求的程式設計師,不懂深度學習(Deep Learning)這個超熱的技術,會不會感覺馬上就out了?現在救命稻草來了,《零基礎入門深度學習》系列文章旨

通過例子學習spark rdd--Transformations函式

通過例子學習spark rdd Transformations函式 所有的Transformations函式完成後會返回一個新的RDD。 在講解例子的時候測試的資料如下: $ hadoop fs -cat /user/zxh/pdata

通過例子學習C++(二)最小公倍數

本文是通過例子學習C++的第二篇,通過這個例子可以快速入門c++相關的語法。 題目要求:輸入兩個整數,求其最小公倍數。 解答方法一:兩個數的最小公倍數,是這兩個數中的大數,或者是這2個數的倍數中的最小數字。 這兩個數字用num1和num2儲存,max表示其中最大數字。如果max能同時整除num1和num2,則

NetCore2.0學習和工作系列文章匯總貼

art ~~ 2.0 解析 net startup slist 源碼解析 get 記錄NetCore2.0的學習和工作,理解對與錯不重要,重要的是,我飄~~~過 01、NetCore2.0優化之Web服務器 與 IIS解耦 02、NetCore2.0優化之Nuget包

轉載】Caffe學習:運行caffe自帶的兩個簡單例子

0.00 練習 siam 其它 sudo 單例 復制 腳本 policy 原文:http://www.cnblogs.com/denny402/p/5075490.html 為了程序的簡潔,在caffe中是不帶練習數據的,因此需要自己去下載。但在caffe根目錄下的data

redis系列通過demo學習list命令

art 隊列 tps 創建 介紹 count stat 其他 圈子 前言 這一篇文章將講述Redis中的list類型命令,同樣也是通過demo來講述,其他部分這裏就不在贅述了。 項目Github地址:https://github.com/rainbowda/learnWay

4、計算機的存儲之內存 - 計算機硬件學習系列文章

強制 好的 tun 全部 命中 ddr area 出廠 兼容性 內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存(Memory)也被稱為內存儲器,其作用是用於暫時存放CPU中的運算數

通過一個例子學習Kubernetes裡的PersistentVolumeClaim的用法

Kubernetes的pod本身是無狀態的(stateless),生命週期通常比較短,只要出現了異常,Kubernetes就會自動建立一個新的Pod來代替它。 而容器產生的資料,會隨著Pod消亡而自動消失。 為了實現Pod內資料的儲存管理,Kubernetes引入了兩個API資源:Persi

機器學習系列文章(監督學習):迴歸

在機器學習領域,最神奇的模型當屬迴歸模型,迴歸模型也是非專業人員一談機器學習就能無意涉及到的內容。在這裡,筆者先談談當前資訊學科被無良媒體誇大報道賺取點選率關注度的商業行為。不知何時起,國民自負的以為手裡拿著手機,包裡揹著筆記本就以為掌握了資訊時代發展的最前沿資訊。這種不理性

機器學習系列文章:貝葉斯決策理論

引言   訓練計算機使之根據資料進行推斷是統計學和電腦科學的交叉領域,其中統計學家提供有資料做推斷的數學框架,而電腦科學家研究推斷方法如果在計算機上有效地實現。    資料來自於一個不完全清楚的過程,將該過程作為隨機過程建模表明我們缺乏知識。也許該過程實際上是確定性的,但

機器學習系列文章:Apriori關聯規則分析演算法原理分析與程式碼實現

1.關聯規則淺談     關聯規則(Association Rules)是反映一個事物與其他事物之間的相互依存性和關聯性,如果兩個或多個事物之間存在一定的關聯關係,那麼,其中一個事物就能通過其他事物預測到。關聯規則是資料探勘的一個重要技術,用於從大量資料中挖掘出有價值的資料