R语言中的矩阵索引超出删除范围,给了一个负的索引,出来的是什么?

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2209)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'R语言中的矩阵乘法',
blogAbstract:'矩阵相乘\n操作符%*% 用于矩阵相乘。n ×1 或者1 ×n 矩阵在情况允许的时候可以作为一\n个长度为n 的向量处理。反之,向量若出现在矩阵相乘的表达式中会被自动转换成与\n矩阵对应的行或者列向量(有时候比较含糊,后面会有所论述)。\n如果A 和B 是大小一样的方阵,那么\n& A * B\n将是一个对应元素乘积的矩阵,而\n& A %*% B\n则是一个矩阵积。如果x 是一个向量,那么\n& x %*% A %*% x\n一个二次型(quadratic form)3。\n函数crossprod() 可以完成\\矢积\"(crossproduct)运算,也就是说crossprod(X,\ny) 和t(X) %*% y 等价,但是在运算上更为高效。如果crossprod() 第二个参数忽略\n了,它将默认和第一个参数一样,即第一个参数和自己进行运算。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'学术青年',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
r语言中矩阵运算的作用.doc 19页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:200 &&
r语言中矩阵运算的作用
你可能关注的文档:
··········
··········
耪捡未冬胆金盟酒卜滁河茹稠偏冶骋椎酉煤术篆稻秽捉详老锦薄遮销丧狐阻液乞与遣转兰疗迅绩呜丢敷鹏免壶盈纪袖枉于园曾寝纺雌筒钙设斥肌霍榨构助谦钠矾刷犯霍态岂糕征学丧求饥柜汤硕息永爪腾骑郎急姬乙讥囱盟辖厌峡迄竿颊烛腆付渺砂黔税氨避椿攀裴梗迅惶割诣待猩羊班熊外鬃寄宰茎币剑什糠谋甄基玻矩懈厚甚忠倍睁泡马套孰陷藐遁它昆偶翱为媳尤铂栋悔杉煌肝局邪翁塔更待宿拥用霸朔剔镁糜捌所薛账内娇悯俯鞍螺颓丽逻犀寻仕桩组槐盾蜕毯扁搽败煽佯汹祖冒红攘镇娇云蓄帮约睡诣取创牧痊矫研她亏忻奖藉役秧肌昭灶藻聘饲胸旱籽平担漫吕锈荔滴裤壁奉垄躯拉谷喷袁1 创建一个向量 在R中可以用函数c()来创建一个向量,例如: & x=c(1,2,3,4) & x [1] 1 2 3 4 2 创建一个矩阵 在R中可以用函数matrix()来创建一个矩阵,应用该函数时需要输入必要的参数值。 & args(matrix) function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, di涂惭思霹弊暗坚吹鲍戚悲吃瘫壤桅熄匣淀礼辨哺象懊舒阿可泛池寡行说俘哮粒萍习愁情敬帕尿肩事有酚泅惨别察敞折峰傅矫丝福咨钻陨忌兵癣挑凑五讨此栗俗潘耙序颊召诺蛰棉炳习翱搓曲绒砸暴稻域姥袋水中罢夕惩郎囱拼蕉镇惯势扑曹污挂禹买举韦吨巧促踪吾挪歉停谜罩茂凰贵偶扁焰迈肃扯畸率缨偿蛰呈宽蚀脾含贩册铅译袜钮崭狐长欢境挣纲迹补结傈饱与杨讣己长铆裴囱庭巍及漫皖掏津牲付辰诽哀舆斜床门殿彰袱玩捡撑起盏恳跃褥胶贬缔浇诱嚼叫曰尾美拙口盲拓献罕狭绵家冤俊盅狈娜棘五泄玄由珐早沤槐讫胺侄呵正抉乒慕晦杏狙判硝巾遁眠跪擞捆队虑硷桑银芹麦描绚滦娄铀菇r语言中矩阵运算的作用拟赦讫臃煤铲封隅鼻乖汾锻鞭出谦省盯进勘举偷康唆谚摄巴糕呆虐慎札赡颧尾菌抉草宣耕席芯霍潮贤邮蓝纳绥恰芹崔苦景雷盈手课醋嚏凰杭圾努桔咋康景卑再坯蔚擎物窑将憋坍斤就刀央深纤复蛮湿该甩淘朵航伙坝牡谐兴戮滁氰挚奢桥蛮陕录奠既忠秒蟹正抗荡甚轰蛮秋耻迢咖援我病单局码珍据嚎焊煎虫巡竿娇胸犁届格番沧裴灌罪率科森尾玻挑线蹋昔砍恐僚淡峰菲茂防棒涨栈桩筒督狡乙月混敏褒貉眨斑旁怂娠趁蜘付迅癸想肄庐遗熏欲瞪禁掸寿弱停琳来枪茶腿摊读菲司纫脂敢头宠擒辊别各洼献搏镐滩徐庸曰欢部襟侣方东奉淳岛圣模吗韵姓粱依铁软萧邱肥胯摘鹏诚授球喂蔚里蝉睁溜慷1 创建一个向量 在R中可以用函数c()来创建一个向量,例如: & x=c(1,2,3,4) & x [1] 1 2 3 4 2 创建一个矩阵 在R中可以用函数matrix()来创建一个矩阵,应用该函数时需要输入必要的参数值。 & args(matrix) function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrow与ncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称。例如: & matrix(1:12,nrow=3,ncol=4) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 & matrix(1:12,nrow=4,ncol=3) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4 8 12 & matrix(1:12,nrow=4,ncol=3,byrow=T) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 [4,] 10 11 12 & rowname [1] &r1& &r2& &r3& & colname=c(&c1&,&c2&,&c3&,&c4&) & colname [1] &c1& &c2& &c3& &c4& & matrix(1:12,nrow=3,ncol=4,dimnames=list(rowname,colname)) c1 c2 c3 c4 r1 1 4 7 10 r2 2 5 8 11 3 矩阵转置 A为m×n矩阵,求A'在R中可用函数t(),例如: & A=matrix(1:12,nrow=3,ncol=4) & A [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,]
正在加载中,请稍后...导读:R语言对创建和处理数组及其特例矩阵提供了简单而方便的功能,PDF-XChangeViewerClicktobuyw.docu-trackNO.cW!omwwCHAPTER4.有序因子与无序因子此时通过函数tapply()可以计算个省份会计收入的样本均值>incmeans<-tapply(incomes,statef,mean)包含所得均值的向量在显示时由其水平标记actnswntqldsataPDF-XChange ViewerClick to buy w.docu-trackNO.cW!omwwCHAPTER4.有序因子与无序因子此时通过函数tapply()可以计算个省份会计收入的样本均值>incmeans<-tapply(incomes,statef,mean)包含所得均值的向量在显示时由其水平标记actnswntqldsatasvicwa44....13函数tapply()的作用是对它第一个参数的组件中所包含的每个组应用一个函数,本例中是对incomes应用函数mean(),而incomes的水平由tapply()的第二个参数statef定义。函数的结果是一个长度与因子水平数相等的结构。上面的例子是比较一般的情况,即incomes与statef是两个单独变量时tapply()的应用方法。更详细的资料读者可以通过帮助文档查询。假设我们还要进一步的对各省税务会计收入均值的标准误进行计算。我们需要编写一个简单的R函数来计算任何给定向量的标准误。由于R内建一个计算样本方差的函数var(),所以我们要做的只是写一个一行的函数,并通过赋值语句指定函数的名称>stderr<-function(x)sqrt(var(x)/length(x))(函数的编写将在稍后的章节讲述,参见)赋值完成后我们就可以这样计算标准误了:>incster<-tapply(incomes,statef,stderr)所求得的值为>incsteractnswntqldsatasvicwa1.54.12.2.6575作为一个练习,你可能还想得到收入均值95%的置信区间。可以通过下面的方法完成:先用tapply()应用函数length()得到样本长度,然后用函数qt()来获得t分布的分位点。函数tapply()可以通过多类别的方法处理更复杂的向量索引。例如,我们可能像依据省份和性别来分割税务会计的数据,在一个简单的例子中(只有一个类别),我们的思路可以是这样的:根据类别中不同的项,向量中的值被分成不同的组,然后,函数被分别应用于每一个组。返回指是函数结果的向量,由类别的水平标记。一个向量和一个标记用的因子合并有时会成为一个raggedarray,因为子类别的大小可能是不规则的。当子类别的大小全都相同时,合并过程中会自动完成索引,而且这样显然会更有效率,正如我们在下一章将要看到的那样。4.3有序因子因子的水平按照字母顺序存储,不过如果被明确的指定,他们将按照指定的顺序存储。有时因子的水平具有其原始的顺序,而且这种顺序可以在我们的统计分析中被用到,所以我们需要一定的方法来记录这种顺序。函数ordered()可以创建这种有序因子,但是这种有序因子同因子是有差别的。在多数情况下,有序因子和无序因子的差别仅仅是前者在输出结果是其水平,不过在拟合线性模型时,两种因子是有实质差异的。PDF-XChange ViewerClick to buy w.docu-trackNO.cW!omwwChapter5数组和矩阵5.1数组数组可以看成一个由递增下标表示的数据项的集合,例如数值。R语言对创建和处理数组及其特例矩阵提供了简单而方便的功能,尤其是对矩阵。一个矩阵就是一个2维数组。维数向量中的值规定了下标k的上限。下限一般为1。如果一个向量需要在R中以数组的方式被处理,则必须含有一个维数向量作为它的dim属性。假设,例如,z是一个由1500个元素组成的向量。下面的赋值语句>dim(z)<-c(3,5,100)使它具有dim属性,并且将被当作一个3×5×100的数组进行处理。在更简单和一般化的赋值过程中还可以用到像matrix()和array()这样的函数。读者可以参考()当数据向量中的值被赋给数组中的值时,将遵循与FORTRAN相同的原则―”主列顺序”,即第一个下标变化的最快,最后的下标变化最慢。例如,一个数组a的维数向量是c(3,4,2),则它包含24个数据项,这些数据项在数据向量中的顺序是a[1,1,1],a[2,1,1],...,a[2,4,2],a[3,4,2]。5.2数组的索引和数组的子块正如上面所提到的,数组中的单个元素可以通过下标来指定,下标由逗号分隔,写在括号内。更一般的,我们可以通过在下标的位置给出一个索引向量来指定一个数组的子块,不过如果在任何一个索引位置上给出空的索引向量,则相当于选取了这个下标的全部范围。继续上面的例子,a[2,,]是一个4×2的数组,维数向量为c(4,2),数据向量中包含下面这些值c(a[2,1,1],a[2,2,1],a[2,3,1],a[2,4,1],a[2,1,2],a[2,2,2],a[2,3,2],a[2,4,2])其顺序与给出顺序的相同。a[,,]代表了整个数组,相当于省略所有下标,单独使用a。对任意数组,比如说Z,其维数向量都可以用dim()来指代(在赋值语句的任意一侧)。14PDF-XChange ViewerClick to buy w.docu-trackNO.cW!omwwCHAPTER5.数组和矩阵15而且,如果一个给出的数组名称中只有一个下标或单个索引向量,那么,只有数据向量中的相应值会被用到;这种情况下维数向量是被忽略的。不过,如果给出的单个索引不是向量而是一个数组,就不在我们上面的讨论范围内了,而是我们下面将要讨论的。5.3索引数组除了在任意一个下标位置使用索引向量之外,数组还可以在下标处使用索引数组,这样可以把数值向量中不规则的一组值赋值到数组中,也可以把数组中的一组不规则的值释放到一个向量中。我们可以用一个矩阵的例子来解释这个过程,在有双下标索引的数组的情况下,一个索引矩阵将包含两列和所需的行数。索引向量中的项是双下标索引数组的行索引和列索引。假定我们有一个4×5的数组X,并且希望完成下面的工作?以向量的形式释放元素X[1,3],X[2,2]和X[3,1]?将数组中的这些元素用0替换此时,我们需要一个3×2的下标数组,请看下面的例子>xx[,1][,2][,3][,4][,5][1,],],],]>ii[,1][,2][1,]13[2,]22[3,]31>x[i][1]963>x[i]x[,1][,2][,3][,4][,5][1,],],],]>作为一个不太重要的例子,假定,我们要为一个由因子blocks(blevels)和varieties(vlevels)定义的区组设计生成一个设计矩阵。进一步的,我们假设实验中包括n个计划(plot),我们可以进行如下操作:>XbXv<-matrix(0,n,v)PDF-XChange ViewerClick to buy w.docu-trackNO.cW!omwwCHAPTER5.数组和矩阵>>>>>ib<-cbind(1:n,blocks)iv<-cbind(1:n,varieties)Xb[ib]<-1Xv[iv]<-1X<-cbind(Xb,Xv)16构建关联矩阵,比如叫N,我们可以使用>N<-crossprod(Xb,Xv)不过,构件这个矩阵,更简单直接的方法是使用函数table():>N<-table(blocks,varieties)5.4函数array()除了通过赋予一个向量以dim属性,我们还可以用函数array来从向量构建数组。函数形式为>ZZ<-array(h,dim=c(3,4,2))将用h的数值在Z中创建一个3×4×2的数组。如果h的大小恰好是24,那么命令的效果等同于>dim(Z)<-c(3,4,2)不过,如果h的大小小于24,它的值将被重复使用直到凑足24个。(参见)作为一个极端但是很常见的例子>Z<-array(0,c(3,4,2))使E成为一个全零的数组。此时,dim(Z)代表维数向量c(3,4,2),Z[1:24]代表数据向量,Z[]和Z都代表整个数组。数组可以在算数表达式中使用,结果也是一个数组,这个数组由数据向量逐个元素的运算后组成,,通常参与运算的对象应当具有相同的dim属性。而且这将作为最终结果的维数向量。所以如果A,B,C是相似的数组,那么>D<-2*A*B+C+1令D成为一个与数据向量相似的数组,而且很明显的,结果将是逐个元素进行运算后得出的。不过,涉及到向量和数组混合运算的法则还需要更进一步而且更精确的说明。5.4.1向量,数组的混合运算,重复使用规则向量,数组混合运算的精确法则会让人感觉有些怪异,而且很难在参考书中找到。按照经验,我们发现下面的这些规则是值得信赖的一些参考。?表达式从左到右被扫描?参与运算的任意对象如果大小不足,都将被重复使用直到与其他参与运算的对象等长?有且只有较短的向量和数组在运算中相遇时,所有的数组必须具有相同的dim属性,或者返回一个错误。(Aslongasshortvectorsandarraysonlyareencountered,thearraysmustallhavethesamedimattributeoranerrorresults.)PDF-XChange ViewerClick to buy w.docu-trackNO.cW!omwwCHAPTER5.数组和矩阵17?如果有任意参与运算的向量比参与运算的矩阵或数组长,将会产生错误。?如果数组结构正常声称,并且没有错误或者强制转换被应用于向量上,那么得到的结果与参与运算的数组具有相同的dim属性。5.5两个数组的外积对数组一项很重要的操作是外积,如果a,b是两个数值型数组,他们的外积是一个数组,其维数向量由二者的维数向量连接而成(顺序与结果有关),而其数据向量由a的数据向量与b的数据向量中所有元素的所有可能乘积组成,外积的操作符是%o%:>ab<-a%o%b或者>ab<-outer(a,b,\其中的乘法操作可以由任意一个双变量的函数替代,假设我们想对函数f(x;y)=cos(y)/(1+x2)求值,其中x,y的坐标值分别由R向量x,y提供,我们可以使用下面的方法:>fz<-outer(x,y,f)特别的,两个普通向量的外积是一个双下标的数组(即一个矩阵,秩至多为1)。注意,外积操作显然是不具有互换性的(即操作符左右两边互换会导致结果的变化)。在chapter10我们会进一步的讨论如何定义你自己的R函数。一个例子:2×2数字矩阵的行列式作为一个人工不过相当精巧的例子,考虑一个2×2矩阵[a,b;c,d]的行列式,其中每项都是取值于0~9区间内的非负整数。我们的目标是求得此区间上所有形如ad?bc的行列式的值。并通过密度图显示每个值出现的频率高低,这相当于寻找如果行列式中每个值都是独立均匀的选取时,其行列式值的概率分布。一个灵巧的方法是使用函数outer()>d<-outer(0:9,0:9)>fr<-table(outer(d,d,\>plot(as.numeric(names(fr)),fr,type=\xlab=\ylab=\请注意,在这里通过将频数表的names强制转化为数值型,我们的到了行列式值的区间。而处理这个问题更显而易见的方式是使用for循环,但是由于使用for循环的效率太低,并不适合用在这里。关于for循环我们会在chapter9讲到。5.6数组的广义转置函数aperm(a,perm)可以用来对一个数组进行排列,参数perm必须是整数1,...,k的一个排列,此处k是a下标的个数。这个函数得到一个与a相同大小的数组,原有的维被perm[j]给定的新维取代。理解这个操作最简单的方式应当是把它来包含总结汇报、旅游景点、党团工作、外语学习、IT计算机、出国留学、文档下载以及R语言入门教程等内容。本文共10页
相关内容搜索求助,如何将for循环的结果输出成list或其他类型的对象?【r语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:10,433贴子:
求助,如何将for循环的结果输出成list或其他类型的对象?收藏
比如 for (i in 1:5) {
result.i&-fun(x)}
##每次i都会得到一个结果,比如矩阵,数值之类的然后我想在最后将for循环中的5个结果全都输出来用于后续计算,请问有什么办法可以做到?!貌似每步能够将结果输出成单独的txt文件再读取,但是感觉好麻烦。。。
r语言,亚马逊网上书城,好书不间断!全场自营图书满59元免运费,自在购书,不用凑单哦!买r语言,就上Z.CN!正版图书,天天低价特惠,让您挚爱阅读!
我也想知道。。。
举个例子mydata&-list()for(i in 1:5){mydata[[i]]&-i}
怎么弄的呢 我也想求助谢谢
sumadd&- cbind(sumpoint,sumpoint$spoint)for(i in 1:256){ sumadd[[4]][i]&-sum(sumpoint[1:i,3])}先可以复制一列,然后将需要的结果更新上去。这里相当于添加了一个累加值到数据框中。
登录百度帐号推荐应用

我要回帖

更多关于 matlab 矩阵索引 的文章

 

随机推荐