1

我有一个代表向量列表的二维数组“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]is(1,3,3)和 of v[1,full]is的尺寸(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 不支持非尾随单例维度?换句话说,在计算中不支持跨步数组,而只支持连续数组?这至少可以说是相当严格的。

谢谢, 卢克

4

1 回答 1

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

于 2014-01-10T14:24:06.317 回答