C# 如何在ilnumerics逻辑符号矩阵中查找维数?
我有一个这样的数字逻辑符号矩阵C# 如何在ilnumerics逻辑符号矩阵中查找维数?,c#,ilnumerics,C#,Ilnumerics,我有一个这样的数字逻辑符号矩阵 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 0
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 0 1 1 1
0 0 0 0 0 1 1 0 1 1
0 0 0 0 0 1 1 0 0 1
0 0 0 0 0 1 1 1 1 0
0 1 1 1 1 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0
1 1 1 0 1 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0
我想获得value==1的所有维度(行和列)
结果=
(0,6), (0,7), (0,8), (0,9)
(1,5), (1,7), (1,8), (1,9)
(2,5), (2,6), (2,8), (1,9)
(3,5), (3,6), (3,9)
(4,5)、(4,6)、(4,7)、(4,8)
使用C#中的ilnumerics库有没有更快的方法
编辑:这是我的解决方案
ILNumerics.ILLogical matrixThreshold;
..... Some C# code
for (int i = 0; i < matrixThreshold.Length; i++)
for (int j = i + 1; j < matrixThreshold.Length; j++)
if (matrixThreshold.GetValue(i, j) == 1) Console.Write("({0},{1}){2}", i, j, Environment.NewLine);
ILNumerics.ILLogical matrixThreshold;
..... 一些C#代码
for(int i=0;i
用于(int i=0;i
成对写出列/行索引:
ILArray<int> C = 1;
ILArray<int> R = ILMath.find(L, 0, C);
// C now holds the column indices, R the row indices
for (int i = 0; i < C.Length; i++) {
System.Diagnostics.Debug.WriteLine("({0},{1})", R.GetValue(i), C.GetValue(i));
}
请重新输入代码,使其能够编译。ilnumerics本机函数不存在吗?例如R语言中的dist()函数。请小心使用ILArray.Length!它给出了最长的维度长度-这不是您想要的长度。最好使用matrixThreshold.S[0]作为列长度,使用.S[1]对于行长度。您只需使用3个参数调用find()。这将简化代码。非常感谢。辅助问题:我想按列求和,这是更快的方法吗?ILNumerics.ILRetArray sumCol=ILNumerics.ILMath.sum(L)
绝对正确。但我建议明确指定要求和的维度。对于L是行向量的情况,这会带来更高的健壮性。哦,使用ILArray而不是ILRetArray作为变量类型!!
ILLogical L = ILMath.rand(10, 12) > 0.5;
>L
Logical [10,12]
[0]: 0 0 0 1 1 1 0 0 0 0 1 1
[1]: 0 1 1 1 0 1 1 1 1 0 1 0
[2]: 0 1 1 1 1 1 0 1 1 0 1 1
[3]: 0 0 0 0 0 1 0 0 0 0 1 0
[4]: 0 0 0 0 0 0 1 0 1 1 0 0
[5]: 0 0 1 0 0 1 0 0 1 1 1 1
[6]: 1 0 1 0 1 1 0 1 0 1 0 1
[7]: 1 1 1 0 1 1 0 1 1 1 0 1
[8]: 1 0 0 1 1 1 0 0 1 0 0 0
[9]: 1 1 1 1 0 0 0 0 1 1 0 0
ILArray<int> C = 1;
ILArray<int> R = ILMath.find(L, 0, C);
// C now holds the column indices, R the row indices
for (int i = 0; i < C.Length; i++) {
System.Diagnostics.Debug.WriteLine("({0},{1})", R.GetValue(i), C.GetValue(i));
}
(6,0)
(7,0)
(8,0)
(9,0)
(1,1)
(2,1)
(7,1)
(9,1)
(1,2)
(2,2)
(5,2)
(6,2)
(7,2)
(9,2)
(0,3)
(1,3)
(2,3)
(8,3)
(9,3)
(0,4)
(2,4)
(6,4)
(7,4)
(8,4)
(0,5)
(1,5)
(2,5)
(3,5)
(5,5)
(6,5)
(7,5)
(8,5)
(1,6)
(4,6)
(1,7)
(2,7)
(6,7)
(7,7)
(1,8)
(2,8)
(4,8)
(5,8)
(7,8)
(8,8)
(9,8)
(4,9)
(5,9)
(6,9)
(7,9)
(9,9)
(0,10)
(1,10)
(2,10)
(3,10)
(5,10)
(0,11)
(2,11)
(5,11)
(6,11)
(7,11)