Browse Source

完成了tensor.cc的代码修改,实现了张量的转置和求一个张量在指定维度上的最大值的索引

pull/7/head
Precreator 11 months ago
parent
commit
42bffbcaf1
1 changed files with 53 additions and 2 deletions
  1. +53
    -2
      cc/tensor/tensor.cc

+ 53
- 2
cc/tensor/tensor.cc View File

@@ -16,11 +16,17 @@ std::shared_ptr<Tensor> Tensor::transpose() {
std::vector<float> transposed_data(size);

// 请在这里写转置的代码

for(std::size_t i=0;i<cols;i++)
{
for(std::size_t j=0;j<rows;j++)
{
transposed_data[i*cols+j]=data[j*rows+i];//
}
}
// 请阅读关于Tensor的定义,在这里创建一个新的Tensor
// 注意,要使用shared_ptr哦!
return std::make_shared<Tensor>(new_shape);
return std::make_shared<Tensor>(new_shape,transposed_data);
}


@@ -50,6 +56,51 @@ std::shared_ptr<Tensor> argmax(const std::shared_ptr<Tensor>& tensor, int axis)
auto result = std::make_shared<Tensor>(output_shape);
// 这个问题似乎有点难,所以我们决定给你送点分。一个简单的办法是分axis为0还是为1来进行讨论,反正我们已经把问题简化为了,在一个二维的tensor里面,找到每一行或者每一列的最大值,并输出一个一维的tensor。
// 补全这里的代码。
size_t rows=tensor->shape[0];
size_t cols=tensor->shape[1];
if(axis==0)
{
output_shape={1,cols};
}
else if(axis==1)
{
output_shape={rows,1};
}
if(axis==0)//qiu lie xiang liang
{
for(size_t j=0;j<cols;j++)
{
float maxx=0;
size_t maxx_id=0;//ji lu ID
for(size_t i=0;i<rows;i++)
{
if(tensor->data[i*cols+j]>maxx)
{
maxx=tensor->data[i*cols+j];
maxx_id=i;
}
}
result->data[j] = static_cast<float>(maxx_id);
}
}
else
{
for(size_t i=0;i<rows;i++)
{
float maxx=0;
size_t maxx_id=0;
for (size_t j=0;j<cols;j++)
{
if(maxx<tensor->data[i*cols+j])
{
maxx=tensor->data[i*cols+j];
maxx_id=j;
}
}
result->data[i] = static_cast<float>(maxx_id);
}
}

return result;
}



Loading…
Cancel
Save