我有一个二维数组' v'表示向量列表 我有一个三维阵列' a'代表一个矩阵列表
ILArray v = counter(2, 3);
ILArray a = counter(2, 3, 3);
现在我想采用两者的子阵列并进行矩阵乘法运算:
ILArray av = multiply(a[1,full,full], v[1,full]);
它会抱怨尺寸不匹配,这是因为a[1,full,full]
的尺寸为(1,3,3)
而v[1,full]
的尺寸为(1,3)
。换句话说,子阵列包含单个维度。在matlab中,我可以使用squeeze()删除这些单例维度。但是我怎么能在ILNumerics中做到这一点?
我刚刚发现,如果单例维度是尾随的,那么它们会被ILNumerics自动删除,所以这可行:
ILArray v = counter(3, 2);
ILArray a = counter(3, 3, 2);
ILArray av = multiply(a[full,full, 1], v[full, 1]);
此外,a[full,full,1]
的尺寸为(3,3)
而非(3,3,1)
。
这是否意味着ILNumerics不支持非尾随单例维度?换句话说,在计算中不支持跨步数组但只支持连续数组吗?至少可以说这是相当有限的。
谢谢, LUC
答案 0 :(得分:1)
不应该简单的重塑吗?
ILArray<int> I = ILMath.counter<int>(1,1,ILMath.size(5,4,3));
I
<Int32> [5,4,3]
[0]: (:,:,0)
[1]: 1 6 11 16
[2]: 2 7 12 17
[3]: 3 8 13 18
[4]: 4 9 14 19
[5]: 5 10 15 20
[6]: (:,:,1)
[7]: 21 26 31 36
[8]: 22 27 32 37
[9]: 23 28 33 38
[10]: 24 29 34 39
[11]: 25 30 35 40
[12]: (:,:,2)
[13]: 41 46 51 56
[14]: 42 47 52 57
[15]: 43 48 53 58
[16]: 44 49 54 59
[17]: 45 50 55 60
I["0;:;:"]
<Int32> [1,4,3]
[0]: (:,:,0)
[1]: 1 6 11 16
[2]: (:,:,1)
[3]: 21 26 31 36
[4]: (:,:,2)
[5]: 41 46 51 56
ILMath.reshape(I["0;:;:"],4,3)
<Int32> [4,3]
[0]: 1 21 41
[1]: 6 26 46
[2]: 11 31 51
[3]: 16 36 56
拥有squeeze
功能会更方便。您可以在bugtracker上打开一个功能请求,以便在下一个版本中实现它:http://ilnumerics.net/mantis