r语言编程艺术中第三章扩展案例中找图中距离最近的一对端点的代码中17

Python010

r语言编程艺术中第三章扩展案例中找图中距离最近的一对端点的代码中17,第1张

扩展案例4,找到图中距离最近的一对端点:

第i行第j列表示城市i和城市j的距离,x[i,j]=x[j,i]

矩阵式对称的,且我们的目标使找到非0的最小值,并返回其所有的位置。

既然是对称的,只需要计算上三角(此例用上三角)或下三角的每一行的最小值,再找到这些最小值的那一个。

q<-matrix(c(0,12,13,8,20,12,0,15,28,88,13,15,0,6,9,8,28,6,0,33,20,88,9,33,0),

nrow=5,ncol=5)

mind<-function(d){

n<-nrow(d)

dd<-cbind(d,1:n)#为原矩阵增加一列,为相应的行号

wins<-apply(dd[-n,],1,imin)#dd[-n,],因为无需计算最后一行的最小值,上三角中值为0

i<-which.min(wins[2,])

#wins第1行为每行上三角最小值的列号,第2行为每行上三角的最小值

#在wins矩阵第2列找出最小值的位置,即为该最小值在原矩阵中的行号

j<-wins[1,i]

#j为wins矩阵中最小的值对应的k

#j为原矩阵的列号

return(c(d[i,j],i,j))

}

imin<-function(x){

lx<-length(x)

i<-x[lx]#注意此处返回的是行号,每一行的最后一个数字为对应的行号

j<-which.min(x[(i+1):(lx-1)])

#lx-1是为了不将行号值纳入计算,(i+1):(lx-1)为对应行i的上三角位置

#j取了该行上三角中最小值的位置

#举例,q第一行(i=1)的上三角值为12,13,8,20.那么最小值为8,j=3,k=i+j=4,为原矩阵中该行最小值的实际位置

k<-i+j

return(c(k,x[k]))

}

#imin主要应用在apply中,要考虑到其应用的是一个什么样子的矩阵

mind(q)

#[1] 6 3 4,最小的值是6,位于第3行第4列

heartsoft 讲得很好,讲到了点上,讲了实质。我补充几点:

1. mind由名词“头脑”,“心” (后者为意译,因为中国古代人认为心为思之器官),转义为及物动词:将(某事情)放在心里(/上),介意(某件事情),后跟名词或相当于名词的动名词作宾语。常见于句型Do you mind opening the window? 这句话中opening the door 是动名词短语,表示开窗这个动作(事情),其逻辑主语就是句子中的主语you, 省略了your 这个词。如果这个动作是“我”发出的,即其逻辑主语是“我”,则说:Do you mind my opening the door? 在口语中可以用人称代词宾格代替所有格:Do you mind me opening the door? 但与see sb. doing sth. 不是一回事。

2. 动名词和现在分词在句子中的作用不同,在形式上完全相同。所以有些语法学家根据形式,将非谓语动词分成 :to 式,-ing 式 和-ed 式,传统语法将它们分成:不定式,动名词和分词。heartsoft 说:“动名词本质上就是现在分词当名词来用”,有点不妥。不如说:动名词本质上就是动词当名词来用,或动词的-ing式作名词用。因为按传统语法,现在分词是不能作名词用的。

现代语法说-ing 可以作名词、形容词、副词用。

3. 及物动词+sb. +to do sth. 这个及物动词有“祈使”之意,即不是请求就是命令。不定式to do sth. 表示“未发生”,“将发生”的事情。如果是have, let, make这三个=“使役”动词,则用无to不定式作宾补:have/let/make sb. do sth. mind 一词没有“使役”也没有“请求”之意。只有“将。。。放在心里”的意思,决定了它没有mind sb. (to)do sth.这一用法。建议楼上不用“介意”这一常用译法来说明。因为 “介意某人去做某事”,{mind sb. (to) do sth.}按汉语的思维,觉得很合情合理的。heartsoft说因为mind是心理活动,因而不能说mind sb. to do sth.是没有说服力的,因为want sb. to do sth. wish sb. to do sth. 中的want, wish也是心理活动动词。

总结:英语的动词的用法有一个习惯的问题,我们要尊重。入乡随从俗。我们尽管现在不在外国,但学外语目的之一就是出国与外国人打交道。不能以汉语的思维来推断。比如:advise和suggest都有“建议”的解释,用法很多相同,但是,你可以说:advise sb. to do sth., 不能说:suggest sb. to do sth. 为什么?说不清,比本题还难说清楚,只有记住了。另外还有两个:

可以说:wish sb. to do sth. 不可以说:hope sb. to do sth.

可以说:order sb. to do sth. 不可以说:demand sb. to do sth.

是常考的语言点,可以分类对比记忆 。

至于有些动词只能跟动名词作宾语,不可以跟不定式作宾语,钱哥川先生曾教我们一词:

Mepscafe, 我发展成:Mepsc(kg)arfid 妹不食咖啡滴:它们是以下20几个词的首字母组成的:

m-- mind, miss

e-- enjoy, escape

p--practise, permit, postpone, put off

s--suggest, stop

c(k/g)--consider, keep, give up

a--avoid, admit, allow, appreciate

r--risk, recommend

f--finish, forbid

i--imange, ignore

d--deny, delay

楼主可以从这些词汇的词义去体会一下,为什么这些词跟动名词而不跟不定式作宾语。

这个问题我会,让我来告诉你care和mind的具体用法与区别,希望能帮助到你

读音与含义不同

care:英[keə(r)]    美[ker]    照顾,照料护理照看小心,谨慎用心关心忧虑,焦虑   

mind:英[maɪnd]    美[maɪnd]    介意对(某事)烦恼,苦恼,焦虑愿意做当心   

用法不同

一、care用作及物动词作“在乎”“介意”“关心”解时,后面常跟that/wh-或if/whether引导的从句;

表示“介意,在乎”之意,care指对某事感到关切、操心或忧虑,主要用于否定句或疑问句。

It's nonsense to say they don't care.

翻译:说他们不在意那是瞎扯。

Joe Sixpack doesn't care about that.

翻译:普通工人不在意那事。

The end of the world may be nigh, but do we really care?

翻译:世界末日可能不远了,但我们真的在意吗?

二、mind作“介意”“关心”“在乎”“反对”解。主要用于疑问、否定、条件句中。可用作不及物动词,也可用作及物动词,接名词、代词、动名词、if/that/wh-从句作宾语。

表示“介意,在乎”之意,mind通常用于否定句、疑问句或条件句中。也可用在答复询问的肯定句中。指因某事打扰、感到不满而表示反对。

Would you mind leaving us alone for a few minutes?

翻译:你不介意让我们单独待一会吧?

I wouldn't mind trading places with her for a day.

翻译:我不介意和她掉换一天位置。

Did she mind about not getting the job?

翻译:她没得到这份工作是不是很介意?