【问题标题】:Multiplying two one-dimensional arrays将两个一维数组相乘
【发布时间】:2017-09-13 11:09:58
【问题描述】:

一个让我烦恼的快速问题(从数学角度和实现角度)。两个一维数组如何相乘?

如果我们有:

int[] a = {1,2,3};
int[] b = {4,5,6};

我们想把结果放到变量c中,你是怎么做数学和实现的? c 也应该是一维的还是二维的?

提前谢谢你!

编辑: 对每个问我想要什么的人。我正在尝试解决一个字面上告诉我的数学问题:

a = {1,2,3};
b = {4,5,6};

c = a * b; //what is c?

我在互联网上没有找到关于如何在数学上做到这一点,我同样对如何用编程语言做到这一点感到困惑。

【问题讨论】:

  • 显示您尝试过的内容。
  • “两个一维数组相乘”是什么意思?如果没有实际定义您要执行的操作,您的问题与“如何将两个香蕉相乘”一样有意义。
  • 嗯?显然,这取决于您如何执行乘法。每个元素对?或者只是所有的价值观?如果你不能告诉我们,我们不能告诉你。
  • 由您来定义乘法对数组的意义。
  • 这意味着我们有一个额外的变量 c = a * b。 c中的元素是什么?它是什么变量类型?达到这些价值的步骤是什么?

标签: java arrays multiplication dimensional


【解决方案1】:

我不确定你是想找到所有的总和,还是尝试用乘法创建一个矩阵。

关于总和,请参阅 duffymo 的回答。

对于一个新数组,最终结果是:

int[][] c= {{4, 8, 12}, {5, 10, 15}, {6, 12, 18}};

想法:您可以遍历它们并乘以每个索引。然后将产品存储在 int[][] c 中。您也可以根据您的实现将它们放在一个列表中,如下所示:c = {4, 8, 12, 5, 10, 15, 6, 12, 18}。

int[][] c = new int[a.length][b.length];
// int[] c = new int[a.length * b.length];
for(int i = 0; i < a.length; i++){
    for(int j = 0; j < b.length; b++){
        c[i][j] = a[i] * b[j];
        // c[i * a.length + j] = a[i] * b[j]; if you want to store it in a 1D array
        // Try a few examples to see why this will work for 1D array
    }
}

【讨论】:

  • 谢谢你的回答。如果我这样做,“base”数组不是很重要吗?例如,在您的计算中,您使用 b 作为基础,并将 b 中的每个元素与整个数组 a 相乘。
  • 是的,这两个数组都很重要,因为它们彼此相乘。从数学上讲,它采用一个 3x1 数组,另一个 3x1 数组,并将一个数组的每个索引与另一个数组的每个索引相乘。最后,你得到一个 3x3 数组。
  • @tudorbalus:我主要关心的是警告那些以前没有见过这种情况的初学者。当一个问题开始时,“我该怎么做(A 或 B,可能是 C,或者可能是 Q)?”,但后来被澄清为“哦,我想我的意思是 B、C 和 D。对不起!”,任何回答问题 A 或 Q 的人都在浪费时间。当问题显然询问 BCD 时,由于在 Q 上喋喋不休而被(正确地)否决的风险意味着他们必须要么删除他们的答案,要么浪费 更多 时间再次回答问题.此外,不清楚的问题对未来的访问者没有帮助。
  • @MartinMorales:您应该链接到并可能引用一些“duffymo 的答案”,因为我在这里看不到它。
  • @KevinJ.Chase :你说得有道理。从现在开始,我会尽量说清楚;但可悲的是,这个问题的性质让我真的不知道我想要什么。值得庆幸的是,事情最终得到了理顺。感谢您的意见,凯文。
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多