如何實現多維陣列的行 列按照 index 訪問都得到連續記憶體

時間 2021-06-01 07:39:02

1樓:補佳林

其實是樓上的思路。。。

比如說二維陣列,記憶體裡面按列主序和行主序分別放兩份資料,按列訪問時讀取列主序,按行訪問時讀取列主序。。這樣似乎可以推到高維的情況。

這樣來做的話,修改陣列的乙個元素就需要更多的操作了,不過樓主只問了讀取的情況。

2樓:Milo Yip

這問題可以不嚴格地轉化為:給定二維及更高維的柵格,能不能把一根繩子放置在裡面,令繩子通過每個柵格僅一次,而又能另繩子通過每對相鄰的柵格。顯然答案是不可以。

但是有一些方法,可能會令相鄰柵格的繩子距離平均一些,例如1. Tiling,常用於矩陣乘法,可增加locality,改善cache coherence。

2. Z-order curve (又作Morton order),廣泛應用在GPU的紋理儲存上(有時稱為texture swizzling),提高locality。

3. Hilbert curve

3樓:

你是說,要訪問乙個矩陣的某一行向量列向量嗎?

Matlab裡有這兩個表示式。

別的語言裡,再不濟,可以自己寫這兩個函式實現之。

還有兩個奇怪的思路:

1.轉置矩陣,然後把行當作列來訪問。

2.康托爾配對函式。/*個人覺得這個是無敵的*/

4樓:qaqabincs

如果位址分段設計,比如乙個完整的位址是a|b,對於行而言,ab是連續位址,對於列,a值域可視為連續。貌似二維是有可能構造定址演算法。是否可以推廣至高維情況,貌似有設計空間,但可能會浪費一些記憶體。

可能與題主初衷有出入。

countif多維陣列是如何計算的?

資料愛好者記 countif range,criteria 是條件計數函式,第乙個引數是資料區域,第二個引數是條件,函式返回的是資料區域中滿足條件的資料的個數。1.先用普通函式進行運算,我們輸入函式 countif A1 B7,C1 計算的是A1 B7內 C1的資料的個數,A1 B7中等於1的個數是...

如何用python實現行列互換?

程式設計小白一枚,使用python 3.6 笨辦法 b fori inrange len a 0 row forj inrange len a row.a j i b.row print b 以上寫成一句 print row i for rowina fori inrange len a 0 用函式...

C語言如何實現陣列的自增長?

王飛 template void Array reallocate unsigned int new size T old data data data new T new size allocated new size int end used new size used new size for...