Medium 1 - tensor and math operations

This commit is contained in:
lucasdelimanogueira 2024-04-28 19:40:36 -03:00
parent 087422a8b0
commit 8d5ac95ca4
6 changed files with 57 additions and 13 deletions

Binary file not shown.

View file

@ -45,14 +45,14 @@ extern "C" {
}
printf("]\n");
printf("Data:\n[");
/*printf("Data:\n[");
for (int i = 0; i < stride; i++) {
printf("%.2f", tensor->data[i]);
if (i < stride - 1) {
printf(", ");
}
}
printf("]\n\n\n");
printf("]\n\n\n");*/
return tensor;
}
@ -81,24 +81,24 @@ extern "C" {
}
printf("Size: %d\n", tensor1->size);
printf("Data: [");
/*printf("Data: [");
for (int i = 0; i < tensor1->size; i++) {
printf("%.2f", tensor1->data[i]);
if (i < tensor1->size - 1) {
printf(", ");
}
}
printf("]\n");
printf("]\n");*/
printf("Size: %d\n", tensor2->size);
printf("Data: [");
/*printf("Data: [");
for (int i = 0; i < tensor2->size; i++) {
printf("%.2f", tensor2->data[i]);
if (i < tensor2->size - 1) {
printf(", ");
}
}
printf("]\n");
printf("]\n");*/
printf("Shapes : [");
for (int i = 0; i < tensor1->ndim; i++) {

View file

@ -17,6 +17,7 @@ extern "C" {
Tensor* sub_tensor(Tensor* tensor1, Tensor* tensor2);
Tensor* elementwise_mul_tensor(Tensor* tensor1, Tensor* tensor2);
void reshape_tensor(Tensor* tensor, int* new_shape, int new_ndim);
Tensor* matmul_tensor(Tensor* tensor1, Tensor* tensor2);
}
#endif /* TENSOR_H */

Binary file not shown.

View file

@ -177,21 +177,64 @@ class Tensor:
return result_data
def matrix_sum(matrix1, matrix2):
# Check if the matrices can be multiplied
if len(matrix1[0]) != len(matrix2):
raise ValueError("Matrices cannot be multiplied. Inner dimensions must match.")
# Initialize the result matrix with zeros
result = [[0 for _ in range(len(matrix2[0]))] for _ in range(len(matrix1))]
# Perform matrix multiplication
for i in range(len(matrix1)):
for j in range(len(matrix2[0])):
result[i][j] += matrix1[i][i] + matrix2[i][j]
return result
if __name__ == "__main__":
from tensor import Tensor
import time
import random
import numpy as np
ini = time.time()
a = Tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],[[13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]])
print(a)
b = a.reshape([4, 3, 2])
#a = Tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],[[13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24]]])
#print(a)
N = 1000
a = Tensor([[random.uniform(0, 1) for _ in range(N)] for _ in range(N)])
b = Tensor([[random.uniform(0, 1) for _ in range(N)] for _ in range(N)])
#b = Tensor([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
#a = Tensor([[[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]]])
#b = Tensor([[[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]]])
#c = a @ b
ini = time.time()
c = a + b
print("\n###########", b)
print("\n#####2######")
fim = time.time()
print(fim-ini)
print(fim-ini)
print("\n\n")
a = [[random.uniform(0, 1) for _ in range(N)] for _ in range(N)]
b = [[random.uniform(0, 1) for _ in range(N)] for _ in range(N)]
ini = time.time()
result_matrix = matrix_sum(a, b)
fim = time.time()
print(fim-ini)
print("\n\n")
ini = time.time()
a = np.random.rand(N, N)
b = np.random.rand(N, N)
result_matrix = a + b
fim = time.time()
print(fim-ini)