【发布时间】:2019-05-30 19:21:08
【问题描述】:
我有一个多维数组,我想将它的每一行乘以一个包含因子的单维数组来创建一个新的多维数组。但是,多维数组中的行数会随着一次运行而变化,因此我需要一种方法来循环乘法遍历多维数组的每一行,直到到达最后一行。
这是一个简单的例子,我有多维数组: { { 1, 2, 3, 4}, { 5, 6, 7, 8}, { 9, 10, 11, 12} }
我想将每一行乘以: {0.5、0.4、0、0.8}
得到: { { 1*0.5, 2*0.4, 3*0, 4*0.8}, { 5*0.5, 6*0.4, 7*0, 8*0.8}, { 9*0.5, 10*0.4, 11*0, 12*0.8} }
我尝试使用示例代码在 for 循环中使用 .Length。
double [] factors = {0.5, 0.4, 0, 0.8};
int [,] myarray = new int [3,4] {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};
double [] output = new double[myarray.Length];
for(int i = 0; i < myarray.Length; ++i)
output[i] = myarray[i] * factors;
我收到语法错误,扩展方法“长度”不能应用于 int 类型,并且使用 [] 进行索引也不能应用于 int 类型。
【问题讨论】:
-
您需要创建第二个(内部)循环,遍历
factors的元素。 C# 不能自己做向量乘法。 -
您可能需要考虑使用锯齿状数组
int[][]而不是二维数组int[,]。使用二维数组时,您需要使用GetLength(int dimention)来获取给定维度的大小。 -
此外,您的代码会产生一个错误,即为
myarray使用错误的索引数量,而不是有关将Length应用于int的错误。确保发布与代码匹配的错误。 -
如果您将代码更改为
output[i] = myarray[i/4, i%4] * factors[i%4];,您将获得结果,但在一个长度为 12 的数组中。
标签: c# arrays multiplication