| @@ -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; | |||
| } | |||