获得SubArray后如何挤压单身尺寸?

时间:2014-01-10 11:59:37

标签: c# ilnumerics

我有一个二维数组' 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

1 个答案:

答案 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