同求3d工口医中文版求text\map\even...

MATLAB求像素点个数 求完整代码。_百度知道
MATLAB求像素点个数 求完整代码。
求各彩色部分的像素点个数。以及所占比例。
我有更好的答案
之前回答过相关的问题(编号1891419),当时由于疏忽,代码存在一点小问题,在这里更正。&上一版本的问题在于,调色板虽然除去了黑白二色,图像数据A仍然是按原调色板索引的。修改的几种思路:1,按新的调色板,对图像数据进行重新映射,把黑白色映射为相近颜色;2,在调色板中去掉黑白二色的同时,对统计结果也进行调整;3,不修改调色板和数据,只在显示结果时剔除该两种颜色。这里采用第2种做法。&其实深究起来,还涉及到一个问题:统计各颜色所占比例时,总数中是否包括黑色白色?暂且按照忽略这两种颜色的方式考虑,这样各颜色的比例合计为100%,但总像素数量与图像不符(缺少黑色和白色的像素)。&参考代码:%&读入图像数据并转换为索引色X=imread('1.png');[A,map]=rgb2ind(X,16);%&统计各种颜色的像素数量s=arrayfun(@(i)sum(A(:)==i),0:length(map)-1);%&过滤黑色和白色inx&=&~any(map-repmat([0&0&0],length(map),1),2)&|&...&&&&~any(map-repmat([1&1&1],length(map),1),2);map(inx,:)=[];s(inx)&=&[];%&在图中显示各像素的数量及占比clfhold&onfor&i=1:length(s)&&&&plot(0.1,i,'s','markerface',map(i,:),'markeredge','k','markers',30)&&&&text(0.4,i,sprintf('%-16i',s(i)),'fontsize',18)&&&&text(0.8,i,sprintf('%4.1f%%',s(i)/sum(s)*100),'fontsize',18)endset(gcf,'color','w');axis&offxlim([0&1])
采纳率:90%
来自团队:
为您推荐:
其他类似问题
matlab的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何遍历两次Reduce中的Iterable&Text&values_百度知道
如何遍历两次Reduce中的Iterable&Text&values
我有更好的答案
package com.import java.util.ArrayLimport java.util.Iimport java.util.L public class T {
public static void main(String[] args) {
// 只要实现了Iterable接口的对象都可以使用for-each循环。
// Iterable接口只由iterator方法构成,
// iterator()方法是java.lang.Iterable接口,被Collection继承。
/*public interface Iterable&T& {
Iterator&T& iterator();
Iterable&String& iter = new Iterable&String&() {
public Iterator&String& iterator() {
List&String& l = new ArrayList&String&();
l.add(&aa&);
l.add(&bb&);
l.add(&cc&);
return l.iterator();
for(int count : new int[] {1, 2}){
for (String item : iter) {
System.out.println(item);
System.out.println(&----------&& & + count + & END.&);
}}结果当然是很正常的完整无误的打印了两遍
Iterable 的值。那究竟是什么原因导致了 reduce 阶段的
Iterable 只能被遍历一次呢?我们先看一段测试代码:测试数据:?1234567
a 3a 4b 50b 60a 70b 8a 9import java.io.IOEimport java.util.ArrayLimport java.util.L import org.apache.hadoop.conf.Cimport org.apache.hadoop.fs.FileSimport org.apache.hadoop.fs.Pimport org.apache.hadoop.io.Timport org.apache.hadoop.mapreduce.Jimport org.apache.hadoop.mapreduce.Mimport org.apache.hadoop.mapreduce.Rimport org.apache.hadoop.mapreduce.lib.input.FileInputFimport org.apache.hadoop.mapreduce.lib.output.FileOutputFimport org.apache.hadoop.util.GenericOptionsP public class TestIterable {
public static class M1 extends Mapper&Object, Text, Text, Text& {
private Text oKey = new Text();
private Text oVal = new Text();
String[] lineA
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
lineArr = value.toString().split(& &);
oKey.set(lineArr[0]);
oVal.set(lineArr[1]);
context.write(oKey, oVal);
public static class R1 extends Reducer&Text, Text, Text, Text& {
List&String& valList = new ArrayList&String&();
List&Text& textList = new ArrayList&Text&();
String strA
public void reduce(Text key, Iterable&Text& values, Context context) throws IOException,
InterruptedException {
valList.clear();
textList.clear();
strAdd = &&;
for (Text val : values) {
valList.add(val.toString());
textList.add(val);
// 坑之 1 :为神马输出的全是最后一个值?why?
for(Text text : textList){
strAdd += text.toString() + &, &;
System.out.println(key.toString() + &\t& + strAdd);
System.out.println(&.......................&);
// 我这样干呢?对了吗?
strAdd = &&;
for(String val : valList){
strAdd += val + &, &;
System.out.println(key.toString() + &\t& + strAdd);
System.out.println(&----------------------&);
// 坑之 2 :第二次遍历的时候为什么得到的都是空?why?
valList.clear();
strAdd = &&;
for (Text val : values) {
valList.add(val.toString());
for(String val : valList){
strAdd += val + &, &;
System.out.println(key.toString() + &\t& + strAdd);
System.out.println(&&&&&&&&&&&&&&&&&&&&&&&&);
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
conf.set(&mapred.job.queue.name&, &regular&);
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println(&Usage: wordcount &in& &out&&);
System.exit(2);
System.out.println(&------------------------&);
Job job = new Job(conf, &TestIterable&);
job.setJarByClass(TestIterable.class);
job.setMapperClass(M1.class);
job.setReducerClass(R1.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
// 输入输出路径
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileSystem.get(conf).delete(new Path(otherArgs[1]), true);
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}}在 Eclipse 控制台中的结果如下:a
9, 9, 9, 9,.......................a
3, 4, 70, 9,----------------------a
&&&&&&&&&&&&&&&&&&&&&&b
8, 8, 8,.......................b
50, 60, 8,----------------------b
&&&&&&&&&&&&&&&&&&&&&&关于第 1 个坑:对象重用( objects reuse )reduce方法的javadoc中已经说明了会出现的问题: The framework calls this method for each &key, (list of values)& pair in the grouped inputs. Output values must be of the same type as input values. Input keys must not be altered. The framework will reuse the key and value objects that are passed into the reduce, therefore the application should clone the objects they want to keep a copy of.
也就是说虽然reduce方法会反复执行多次,但key和value相关的对象只有两个,reduce会反复重用这两个对象。所以如果要保存key或者value的结果,只能将其中的值取出另存或者重新clone一个对象(例如Text store = new Text(value) 或者 String a = value.toString()),而不能直接赋引用。因为引用从始至终都是指向同一个对象,你如果直接保存它们,那最后它们都指向最后一个输入记录。会影响最终计算结果而出错。 看到这里,我想你会恍然大悟:这不是刚毕业找工作,面试官常问的问题:String 是不可变对象但为什么能相加呢?为什么字符串相加不提倡用 String,而用 StringBuilder ?如果你还不清楚这个问题怎么回答,建议你看看这篇《深入理解 String, StringBuffer 与 StringBuilder 的区别》关于第 2 个坑:The Iterator you receive from that Iterable's iterator() method is special. The values may
Hadoop may be streaming them from disk. They aren't really backed by a Collection, so it's nontrivial to allow multiple iterations.最后想说明的是:hadoop 框架的作者们真的是考虑很周全,在 hadoop 框架中,不仅有对象重用,还有 JVM 重用等,节约一切可以节约的资源,提高一切可以提高的性能。因为在这种海量数据处理的场景下,性能优化是非常重要的,你可能处理100条数据体现不出性能差别,但是你面对的是千亿、万亿级别的数据呢?
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。hadoop mapreduce求平均分
hadoop mapreduce求平均分
求平均分的关键在于,利用mapreduce过程中,一个key聚合在一起,输送到一个reduce的特性。
假设三门课的成绩如下:
张三 & &78 &
李四 & &89 &
王五 & &96 &
赵六 & &67 &
english.txt
张三 & &80 &
李四 & &82 &
王五 & &84 &
赵六 & &86 &
张三 &88 &
李四 &99 &
王五 &66 &
赵六 &72 &
mapreduce如下:
public static class Map extends Mapper&LongWritable, Text, Text, IntWritable& { &
& & & & &&
& & & & // 实现map函数 &
& & & & public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { &
& & & & & & // 将输入的纯文本文件的数据转化成String &
& & & & & & String line = value.toString(); &
& & & & & & // 将输入的数据首先按行进行分割 &
& & & & & & StringTokenizer tokenizerArticle = new StringTokenizer(line, &\n&); &
& & & & & & // 分别对每一行进行处理 &
& & & & & & while (tokenizerArticle.hasMoreElements()) { &
& & & & & & & & // 每行按空格划分 &
& & & & & & & & StringTokenizer tokenizerLine = new StringTokenizer(tokenizerArticle.nextToken()); &
& & & & & & & & String strName = tokenizerLine.nextToken();// 学生姓名部分 &
& & & & & & & & String strScore = tokenizerLine.nextToken();// 成绩部分 &
& & & & & & & & Text name = new Text(strName); &
& & & & & & & & int scoreInt = Integer.parseInt(strScore); &
& & & & & & & & // 输出姓名和成绩 &
& & & & & & & & context.write(name, new IntWritable(scoreInt)); &
& & & & & & } &
& & & & } &
& & public static class Reduce extends Reducer&Text, IntWritable, Text, IntWritable& { &
& & & & // 实现reduce函数 &
& & & & public void reduce(Text key, Iterable&IntWritable& values, Context context) throws IOException, InterruptedException { &
& & & & & & int sum = 0; &
& & & & & & int count = 0; &
& & & & & & Iterator&IntWritable& iterator = values.iterator(); &
& & & & & & while (iterator.hasNext()) { &
& & & & & & & & sum += iterator.next().get();// 计算总分 &
& & & & & & & & count++;// 统计总的科目数 &
& & & & & & } &
& & & & & & int average = (int) sum /// 计算平均成绩 &
& & & & & & context.write(key, new IntWritable(average)); &
& & & & } &
输出如下:
张三 &82 &
李四 &90 &
王五 &82 &
赵六 &75 &博客分类:
在本系列的第一篇中,介绍了几种在数据库应用中常见的Join算法,本文将会介绍两种使用Map-Reduce实现对两个数据集合进行Join的算法,其中的一种会用到第一篇中提到的哈希Join算法。这里将这两种方法分别命名为Map-Reduce Join和Map-Only Join。
1. Map-Reduce Join
这种Join方法,需要在hadoop上执行一个完整的Map-Reduce过程。下面的图说明了这个过程。
Map过程
Map过程从需要进行合并的数据集合中读取数据,以Join条件中被用到的那一列的值为key,以整行数据为Value,将结果写到输出流中。为了标记Map集合中的每一行记录来自于哪个源数据集合,需要位Key添加一个标识。例如,有数据集合P(A,B)和Q(C,B),其中P集合有A、B两列,而Q集合有B、C两列,在根据B列对两个数据集合进行Join的情况下,P集合中的数据经过Map之后将以(B,tag,A+B)的形式输出,其中B列的值与tag的值共同组成Key,而整行记录将作为Value输出。对于Q来说也是如此,Q集合经过Map之后将以(B,tag,B+C)的形式输出。
tag的作用
tag的作用是为了区分数据来源,以便在Reduce阶段可以对不同来源的记录进行Join。但是,由于在Key中增加了一个tag,如果使用Hadoop默认的切分方法(Partitioner),会将B列值相同的记录分配给不同的Reducer,因此我们需要提供自定义的Partitioner,在选择Reducer的时候,不去考虑tag。
在数据丢给Reducer的reduce方法进行处理之前,Hadoop会根据key将数据进行聚合,把具有相同key的数据组合到一起去。由于在Key中增加了tag标识,如果使用Hadoop提供的默认分组方法,来自于不同集合的记录是无法被组合到一起去的,因此,我们同样需要提供自定义的分组排序算法,在分组的时候不去考虑tag标识,同时保证在同一个Key下面,来自于一个集合的所有记录都会排在另外一个集合的所有记录之前。
Reduce过程
在Reduce阶段,由于Map-Reduce方法保证具有相同Key的数据会被丢给同一个Reducer进行处理,因此P和Q中,在B列值相同的记录会被同一个Reducer进行处理,这个时候就可以执行Join操作了。所采用的算法如下:
void reduce(TextPair key , Iterator &TextPair& values ,
OutputCollector &Text , Text & output , Reporter reporter)
throws IOException {
ArrayList&Text& T1 = new ArrayList&Text&();
Text tag = key.getSecond();
TextPair value =
while(values.hasNext()){
value = values.next();
if(value.getSecond().compareTo(tag)==0) {
T1.add(value.getFirst());
for(Text val : T1) {
output.collect(key.getFirst(),
new Text(val.toString() + "\t" + value.getFirst().toString()));
算法中的Key和Value都使用了TextPar类,找个类可以封装两个Text对象,对于Key来说,这个TextPair封装了被Join列的值以及第一个其中一个数据集合的tag,而对于Value来说,TextPair则封装了每个集合中的记录以及这个记录的来源。
2. Map-Only Join
这种Join算法类似于本系列第一篇中提到的哈希Join,本质是将哈希Join应用到分布式环境中。这种Join方式,要求被Join的两个数据集合中,至少有一个集合的数据量能够被完全载入内存中。
这个算法,在每一个Mapper启动之前,将数据量较小的结合中的数据载入内存的哈希表中,而map方法则是读取另外一个集合的数据记录,与预先载入到内存哈希表中的另外一个集合的记录进行Join。
由于在这种算法中,需要将数据量比较小的那个集合中的记录复制到每一个Mapper的内存中,因此也被叫做广播Join算法(Broadcase Join)。
浏览: 211275 次
来自: 杭州
public static &T super B& ...
class Test1 {
问下如何进行列中数字大小的比较。我看了几个过滤器,最接近的是S ...
rowkey是A_B我知道要的A集合,也知道要的B范围不用自定 ...
文章不错,尤其了后半部分讲解一些原理。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'【急求】textmap not load【崩坏学园吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:205,429贴子:
【急求】textmap not load
为什么更新登陆不起,天哪路
记录生活的帖子 不管多不开心还要过下去呀 下月就19啦 年轻真好 还是希望能再瘦一点 这个胃确实是疼醉了 好啦 加油吧
内存清一下就ok了,之前我也是
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 3d工口医中文版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信