当前位置: 首页 > 知识库问答 >
问题:

在减速机上循环两次

漆雕嘉平
2023-03-14

我正在实现两相矩阵乘法。下面是第一阶段的减速器。键是左文件的行索引和右文件的列索引。我希望映射和减速器的输出计数相同。但是看起来内环递增的迭代器与外环的迭代器相同,因此减速器输出的数量等于键的数量。

代码片:

@Override
        public void reduce(Text key, Iterable<Text> values, Context context)
        throws IOException, InterruptedException
        {
            for (Text outer : values) {
                String [] outerLine = outer.toString().split("\t");
                //int outerIndex = 0;
                //outerIndex = outerLine[0].equalsIgnoreCase(leftFilePattern) ? outerIndex : 1;
                if(outerLine[0].equalsIgnoreCase(rightFilePattern))
                    continue;
                double outerValue = Double.parseDouble(outerLine[2]);
                for (Text inner : values) {
                    String [] innerLine = inner.toString().split("\t");
                    if(innerLine[0].equalsIgnoreCase(leftFilePattern))
                        continue;
                    context.write(new Text(key.toString() + "-" + innerLine[1]), 
                                new DoubleWritable(outerValue * Double.parseDouble(innerLine[2])));
                }
            }

但是当我有如下简单的java应用程序时:

List<Integer> l = Arrays.asList(10, 15);
        Iterable<Integer> it = l;
        for (Integer in : it) {
            for (Integer out : it) {
                System.out.println(in + " " + out);
            }
        }

这里的输出数是4。如果内环的工作原理与减速机相同,则输出计数应为1,即(10-15)。

有人能解释这种行为吗。

维沙尔

共有1个答案

阳修永
2023-03-14

有一种实现Iterable的可能方法可能会导致这种效果。

其目的似乎是每个迭代器()调用都应该返回自己的迭代器实例。java中的Iterable类。util,包括数组使用的私有列表类。asList(),都这样做。在相同的Iterable上嵌套foreach需要这种行为,并且Iterable的声明目的是foreach支持。

我在IterableAPI文档中找不到任何直接需要该行为的内容。

显然,如果使用相同的对象作为两个iterator()调用的结果,则相同Iterable上的嵌套foreach语句将按照您描述的方式失败。

=========================================================

如果是这样的话,我最好的建议是对值进行初始传递,将每个文本引用复制到行为良好的列表中

 类似资料:
  • 这里是一个以圆圈为单位的交叉网格,当前为5x5。我试图得到一行5,下面是一行4,然后是3,然后是2等等。我试着改变for循环和值,但什么都不起作用。我需要使用行和列吗? 谢谢!

  • 描述 Makeblock 42步进电机是一种简单但功能强大的步进电机,具有高输出扭矩和响应速度,但噪音低,能耗低。 它具有比42步进电机更高的扭矩。 它可以用作一些高性能机器的动力电机。 技术规格 步伐角度(度):1.8 相电流:2.8A 电线数量:4 电机长度:56mm 比例: 5.18:1 输出轴:D轴8mm 尺寸图(mm) 演示 不包括Makeblock多功能电机支架。 连接类型 您可能会对

  • 问题内容: 因此,我正在研究UVA问题,并且我有4个嵌套循环来遍历多边形列表(每个多边形都包含一个点列表,其中每个点都包含一个整数x和y来表示其坐标,即,polygon [0]是一个点,其坐标为面[0] .x和面[0] .y)。 我试图减少程序中for循环的数量,以使其更高效并降低运行时间。我的代码如下: 我尝试通过使用itertools.product使其变得更加高效,如下所示: 无论如何,我的

  • 以下是您将看到的一些方法的快速描述: > :返回船的边界(一个矩形) :返回表示船边界中心的Vector2d。 :一个,它表示船的速度(每帧添加到位置) :一个新的,当给定一个角度(以弧度为单位)时,将其标准化 :不是线性插值!如果你想看代码,这里是(在类中): 当玩家没有按键时,飞船应该减速。以下是我为此所做的: 然而,现在我意识到我希望它在向目标移动时漂移。我试过这个: 这当然不会真的达到零速

  • 描述 Makeblock迷你金属齿轮电机拥有迷你机身,精致的齿轮和简单的连接器,并被广泛应用于众多DIY项目中。有三种不同的转速供您选择,分别是100RPM,210RPM和390RPM。 规格 额定电压:DC 12V 转速:100RPM / 210RPM / 390RPM(取决于您的需求) 总大小:46 x 12mm 工作温度范围:-20℃〜+ 60℃ 尺寸图(mm)

  • 我有一个具有字段is和is_searchable data has的列表