2017-02-23 106 views
0

我想知道在Matlab中是否存在某種可能性來僅在N×M×K數組的N×M部分上映射函數,而無需使用for-loops。具體來說,我有一個包含長度爲3的向量的N×M矩陣,所以我的總體結構是N×M×3。現在我想計算每個向量的範數,因此,應用函數,它將1×3向量作爲輸入,並將其應用於N×M部分的每個單元「頂部」,從而產生N×M×1陣列。Matlab - 僅對多維數組的特定子維應用函數

我現在這樣做的方式是通過使用for-loops並通過索引(i,j,:)提取相關部分。現在我只是好奇,如果有更好的解決方案。 :) 這似乎是可能的通過cellfun一個N×M cellarray,但我找不到任何方式在正常的數組上做到這一點。

在此先感謝!

回答

1

某些Matlab函數(如總和)允許您指定要執行的維度。 使用規範的定義中,對於輸入陣列的:

sqrt(sum(a.^2,3)) 

應沿第三維度返回常態。

0
  1. 可以使用num2cell切片矩陣或mat2cell,然後應用cellfun
  2. 您可以使用arrayfun(@(X,Y)...,其中x是你的矩陣和y是指數。另一種方式是使用bsxfun

爲了節省內存和時間只是發送源數據的一部分cellfun如果你不想處理整個矩陣