From a45b93007531e767e40201f4bdd1b4bb04ad2caf Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Thu, 2 May 2024 21:14:26 -0300 Subject: [PATCH] transpose n dimensions cpu --- build/cpu.o | Bin 5384 -> 5864 bytes build/libtensor.so | Bin 90288 -> 90336 bytes norch/__pycache__/tensor.cpython-38.pyc | Bin 9351 -> 9278 bytes norch/csrc/cpu.cpp | 32 +++++++++++++++++++++++- norch/tensor.py | 7 ++---- test.py | 8 ++++-- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/build/cpu.o b/build/cpu.o index f1d237e13074bdd24178712377b4b07ce85b0899..9f7b57930e478ea0ee1a31a6f42d792b6e0c7593 100644 GIT binary patch delta 811 zcmZuvO=uHA6yBMNZYEhbfA|C9At=PE2%@c}5+X7%M->ZR1WPU!8+x(OOUz-gbQyw$ zK@g7~3KgMBEg1;>;prOA;;DbWI=>`*rE&+{BQ!DRu-q3` zy7n?Cm;?Gh=2q3hJnx|HhE1CTCg}Xq3~idFGoWqLhJtO{Qby3$EbSC-fQ1f9$>LCb zPiaI4aAb&rL|tg+Rt?bxr!CYS3<;WPs%ENf%ur3xh9VnPRiJ9ujN)B0rcOQ>UoewE zhu4q=VjW)ekVRcyaJ6So1aR<7uFuO`p(_(mSY8TkqJ)mYrN^VI__lF$qK_iS^zy~9Dzr2N|0K}LRlad9c9<$NPo&6M0Qub#iDLm4dfWKO}i-w)Qk|M1i0 z&*m(`29YH86)zC^D>fB+5L0EE_DEicPvcD@?}ksvm3VsSZiD-d$aXw~-xHZiWN>Sc vlSpHi$Txs!Vc7<=9h0eKCRB+8jB9csIZc=u>sTet~emSiAnI^@gYw0Lt>Ocm30Ou-o+u;|Y%$9tR&Vc`zOV@_@oWK*Aru z!o57LAl*P+4?Gx8eC8JtVEW82$j}Vb^?GeHP|@odlh?7UPR{4Do4k%oZ}S7L6^z1j zL0Vk-1lpLKdD)nz@UU|*Y@W>%%OnJr0LtBGWMB|tU}RXtvDu3MEhATal%aWIadBpP z-ef^RvB}|rhMRW?8Za^~;+XtO=pNHQj>)Hl%{W)^gUn@MFqq6KV$Nj8Ir$)u*yIQi z4H$C4nHQ_P%e Y1uum6pK)@Rm>HLVAcR}O0JL2W0EnY|aR2}S diff --git a/build/libtensor.so b/build/libtensor.so index c430d1986fbb36dca99ac3279f2f5b53a273deee..6912a056ea71261f54a1ff237e8db51a48743418 100755 GIT binary patch delta 12490 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 delta 12297 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[0]; int cols = tensor->shape[1]; @@ -125,6 +125,36 @@ void transpose_tensor_cpu(Tensor* tensor, float* result_data) { result_data[j * rows + i] = tensor->data[i * cols + j]; } } +}*/ + +void transpose_tensor_cpu(Tensor* tensor, float* result_data) { + int* shape = tensor->shape; + int ndim = tensor->ndim; + int* strides = (int*)malloc(ndim * sizeof(int)); + int* indices = (int*)calloc(ndim, sizeof(int)); + + strides[ndim - 1] = 1; + for (int i = ndim - 2; i >= 0; i--) { + strides[i] = strides[i + 1] * shape[i + 1]; + } + + int idx_result; + for (int idx_source = 0; idx_source < tensor->size; idx_source++) { + idx_result = 0; + for (int dim = 0; dim < ndim; dim++) { + idx_result += indices[dim] * strides[dim]; + } + result_data[idx_result] = tensor->data[idx_source]; + + // Update indices + indices[ndim - 1]++; + for (int dim = ndim - 1; dim > 0; dim--) { + if (indices[dim] == shape[dim]) { + indices[dim] = 0; + indices[dim - 1]++; + } + } + } } void assign_tensor_cpu(Tensor* tensor, float* result_data) { diff --git a/norch/tensor.py b/norch/tensor.py index fa69bd6..a0323db 100644 --- a/norch/tensor.py +++ b/norch/tensor.py @@ -385,9 +385,6 @@ class Tensor: @property def T(self): - if self.ndim != 2: - raise ValueError("Transpose requires 2D tensors") - Tensor._C.transpose_tensor.argtypes = [ctypes.POINTER(CTensor)] Tensor._C.transpose_tensor.restype = ctypes.POINTER(CTensor) @@ -395,8 +392,8 @@ class Tensor: result_data = Tensor() result_data.tensor = result_tensor_ptr - result_data.shape = [self.shape[1], self.shape[0]] - result_data.ndim = 2 + result_data.shape = self.shape[::-1] + result_data.ndim = self.ndim result_data.device = self.device return result_data diff --git a/test.py b/test.py index 27f3ddf..bce55f0 100644 --- a/test.py +++ b/test.py @@ -55,8 +55,12 @@ if __name__ == "__main__": [7.890, 8.901, 5.91], ]]) - result = b @ a - print(result) + b = norch.Tensor([ + [1.234, 2.123, 1.5]]) + + print(a.shape) + result = a.T + print(result.shape) #c = result.sum() #c.backward() #print(a.grad)