999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于元胞數據的多維數據傳遞機制

2016-01-24 02:28:28尹云旺2
北京測繪 2016年2期

王 珊 尹云旺2

(1.山東科技大學測繪科學與工程學院,山東 青島266590;2.西安大地測繪股份有限公司,陜西 西安710000)

1 前言

文章開始之前,需要特殊說明一點,在其他編程語言中,也有元胞數組的概念,但是本文中所闡述的元胞數組,是基于MATLAB軟件介紹的,它為 MATLAB中的一種數據類型[1],相關特性可能與其他軟件有所不同。

軟件開發過程中,我們有時需要一次傳遞多維數據到一個循環中,普通數據傳遞一次只能傳遞一個數據,但是使用元胞,我們可以一次傳遞多維數據。與結構體通過域名訪問元素值不同,元胞數組通過索引方式訪問包含在其中的元素值,正是由于元胞數組的這種特性,使得其與循環聯合使用時,可以解決很多軟件開發過程中遇到的問題。

2 元胞數組

2.1 元胞數組的定義

元胞數組由元胞組成,是一個能夠存放任何數據類型、任意大小數組的數據容器。同一個元胞數組中各元胞的內容可以不同,可以是MATLAB或用戶自定義的數據類型[2]。每個數據類型可以有任意維數。能夠混合存儲任意類型和大小的數組是元胞數組一個重要功能,另外一個經常使用元胞的方式是存儲不同長度的字符串。像MATLAB中其他數組一樣,元胞數組必須為矩形形狀,也就是說元胞數組的任何一維的每行每列都必須相等。了解結構體的人可能知道,結構體和元胞數組設計和目的都很相似,都提供了一種存儲不同大小和不同類型數據的方式,兩者最大的區別在于結構體使用域名來訪問存儲在其中的數據,而元胞數組則使用數字索引,所以我們可以利用索引的方法,一次傳遞多維數據。

2.2 元胞數組操作

為方便理解本文中的相關例子,我們先來講解一下元胞數組的一些基本操作。元胞數組的操作包括元胞數組創建、元胞數組連接、元胞數組索引、元胞數組賦值和從元胞數組返回值等內容[3],這里僅對元胞數組創建、賦值和索引等內容做簡要介紹。

2.2.1 創建元胞數組

在MATLAB中創建元胞數組和創建其他類型數組類似,主要的區別是創建元胞數組時需要使用花括號將元胞數組的內容或索引括起來,而創建其他類型數組時使用的為中括號[4]。元胞數組中的每行元素用逗號或空格符做間隔,各列之間用分號做間隔。在賦值運算符“=”右邊用花括號“{}”來為一個元胞數組賦值。例如使用命令A={B C D E}就可以創建一個包含B C D E不同數據類型的元胞數組,可以在一個元胞數組中嵌套另一個元胞數組。也可以使用函數cell來創建元胞數組,運行cell(m,n)命令就創建了一個大小為m×n的元胞數組。

2.2.2 元胞數組索引

當處理元胞數組時,你可以選擇元胞數組中整個元胞來進行操作,也可以選擇元胞中的內容進行操作,第一種方式是元胞索引,第二種方式是內容索引[5]。x=C(s)命令返回元胞數組C中下標為s的元胞,x=C{s}命令返回元胞數組C中下標為s的內容,假設一個元胞數組包含多個元胞,每個元胞又為包含一個或多個元素的數組,則x=C{s}(t)命令返回元胞數組中由下標s指定的元胞中的下標為t的數組元素。

在這里列舉一個簡單的例子來說明上述操作,首先在MATLAB軟件中輸入下面兩條語句:

data(1,:)= {'張 三'49 {58 98.3 [103 72]}};

data(2,:)= {'李 四'25 {60 98.6 [105 75]}};

這兩個語句創建了一個2×3的元胞數組data,其中每一行中又嵌套了一個元胞數組,嵌套的元胞數組中最后一個元素為一個向量。使用a=data(2,1)命令時,命令窗口返回a=’李四’;使用b=data{2,1}命令時,命令窗口返回b=李四;使用c=data{2,3}(1)命令時,命令窗口返回c=[60],使用d=data{2,3}{1}命令時,命令窗口返回d=60,各運算結果如圖1所示。

使用whos命令來查看各個變量的類型,如圖2所示,變量a、c和data的類型為元胞,變量b的類型為字符型,變量d的類型為數值型。

3 使用元胞傳遞數組數據實例

在使用MATLAB編程時,我們可能遇到這樣的情況,需要將一個以上的數據同時傳遞到一個循環中。例如,在編程繪制礦區工作面示意圖時,假設一個礦區有三個矩形工作面。

如果直接使用Plot命令繪圖這三個工作面,那么三個工作面首尾則由一條直線連接在一起,如下圖圖3所示:

為了解決上述問題帶來的不便,一種較理想的方法是使用一個循環每次繪制一個工作面。但是,這就需要一次傳遞給循環一個工作面的數據。使用其他類型數據傳遞給循環時,一次只能傳遞一個數據。由于元胞值可以為一個數組,每個元胞又可以整體看做一個數據,同時可以使用索引尋訪每個元素值,所以我們可以在循環中一次傳遞多維數據,從而實現上述需求。編寫MATLAB程序如下:

[filename,pathname]=uigetfile(...

{'*.txt';'*.xls';'*.xlsx';'*.xlsb';'*.xlsm';...

'*.*'},...

'坐標數據導入');

if isequal([filename,pathname],[0,0])

return

else

File=fullfile(pathname,filename);

end %讀取工作面坐標文件

gzmzb=importdata(File);%導入工作面坐標數據到變量gzmzb中

x_gzm=gzmzb(:,1);%將變量gzmzb第一列數據賦值給x_gzm

y_gzm=gzmzb(:,2);%將變量gzmzb第二列數據賦值給y_gzm

k=length(x_gzm)/4;%根據坐標求工作面數目

gzm=cell(k,1);%創建和工作面數目相等的元胞數組

gzm(:)={zeros(5,2)};%對元胞數組中每個元胞初始化

jj=1;

for mm=1:length(x_gzm)

if mod(mm,4)==0

gzm{jj}(1,1)=x_gzm(mm-3);

gzm{jj}(2,1)=x_gzm(mm-2);

gzm{jj}(3,1)=x_gzm(mm-1);

gzm{jj}(4,1)=x_gzm(mm);

gzm{jj}(5,1)=x_gzm(mm-3);

gzm{jj}(1,2)=y_gzm(mm-3);

gzm{jj}(2,2)=y_gzm(mm-2);

gzm{jj}(3,2)=y_gzm(mm-1);

gzm{jj}(4,2)=y_gzm(mm);

gzm{jj}(5,2)=y_gzm(mm-3);

jj=jj+1;

end

end %將4個坐標組成一個工作面完整坐標,為了使工作面閉合,%添加第五個坐標,其值和第一個坐標相等

for nn=1:k

plot(gzm{nn}(:,1),gzm{nn}(:,2),'-r','linewidth',2.5);

hold on

end %繪制工作面示意圖

程序中使用cell(k,1)命令創建了一個大小為k×1的元胞數組,然后使用gzm(:)={zeros(5,2)}命令,將元胞數組中每個元胞的值初始化為5×2的全零數組,這樣做可以提高程序運行速度,并防止發生內存溢出錯誤,最后使用循環將工作面坐標賦值給每個元胞并繪圖。運行該程序如圖4所示:

4 結語

MATLAB不僅功能強,而且使用方便,易于掌握[6]。使用其他方式也可以實現同樣效果,但是使用元胞數組傳遞多維數據更方便、高效、直觀。元胞數組設計的目的就是為了存儲不同類型、不同大小的數據,并通過索引來尋訪其中的值,所以元胞數組和循環的聯合使用,必定成為傳遞多維數據的一種理想方案。

主站蜘蛛池模板: 免费三A级毛片视频| 久久这里只有精品23| 婷婷六月综合| 国产乱肥老妇精品视频| vvvv98国产成人综合青青| 日韩欧美91| 国产91小视频在线观看| 亚洲午夜18| 国产毛片基地| 久久女人网| 国产成人精品亚洲77美色| 免费va国产在线观看| 欧美区一区二区三| 欧美成人精品一区二区| 九色最新网址| 97se亚洲综合在线| 2048国产精品原创综合在线| www.亚洲国产| 精品伊人久久久香线蕉 | 中文字幕欧美日韩高清| 免费一级无码在线网站| 99久视频| 精品无码一区二区在线观看| 国产成人一二三| 日韩精品无码免费一区二区三区| 免费在线国产一区二区三区精品| 无码啪啪精品天堂浪潮av| 丰满人妻中出白浆| 亚洲综合香蕉| 中文字幕一区二区人妻电影| 亚洲日产2021三区在线| 天堂成人在线| 99视频在线精品免费观看6| 日本欧美精品| 91精品综合| 男女性午夜福利网站| 国产h视频在线观看视频| 亚洲天堂视频在线播放| 国产成人做受免费视频| 欧美色综合网站| 日韩欧美国产另类| 国产成人乱码一区二区三区在线| 4虎影视国产在线观看精品| 国产办公室秘书无码精品| 免费女人18毛片a级毛片视频| 中文精品久久久久国产网址 | 免费jizz在线播放| 伊人色天堂| 日韩精品毛片人妻AV不卡| 青青青草国产| 久久国产热| 久久99久久无码毛片一区二区| 亚洲天堂久久新| 国产在线观看精品| 中文字幕 91| 久久久黄色片| 国产三级毛片| 国产69精品久久久久妇女| 97视频精品全国在线观看| 亚洲无码熟妇人妻AV在线| 波多野结衣一二三| 婷婷亚洲天堂| 成人日韩视频| 日韩国产黄色网站| 亚洲精品第一页不卡| 免费高清毛片| 激情六月丁香婷婷四房播| 亚洲成人高清无码| 国产熟女一级毛片| 亚洲va在线∨a天堂va欧美va| 自偷自拍三级全三级视频 | 欧美一级专区免费大片| 免费毛片在线| 国产精品亚洲一区二区三区在线观看| 色噜噜狠狠狠综合曰曰曰| 色综合天天综合| 欧美另类图片视频无弹跳第一页| 一级做a爰片久久毛片毛片| 亚洲无码高清视频在线观看| 国产精品乱偷免费视频| 97久久精品人人做人人爽| 国产一级二级三级毛片|