NSLog matrix_float4x4 或 simd::float4x4

NSLog matrix_float4x4 or simd::float4x4

苹果有没有提供类似于'OpenCV'或'Eigen'的Accelerate矩阵的调试工具?

Eigen 和 OpenCV 如何打印矩阵的示例代码

Eigen::Matrix4f matrix;
std::cout << matrix << std::endl;

4x4 矩阵的输出

-0.483662   0.86859   0.10781   51.8456
 0.865028  0.455597  0.210137   29.6781
 0.133405  0.194894 -0.971709    192.69
        0         0         0         1

我想要的粗略近似值,但还不够一般。

这是我的速成版。我最终可能会在处理 C 或 C++ 版本的地方使它更彻底,但我真的希望 Apple 提供它,但我还没有找到文档。

void logSIMD(const simd::float4x4 &matrix) 
{
   std::stringstream output;
   int columnCount = sizeof(matrix.columns) / sizeof(matrix.columns[0]);
   for (int column = 0; column < columnCount; column++) {
      int rowCount = sizeof(matrix.columns[column]) / sizeof(matrix.columns[column][0]);
      for (int row = 0; row < rowCount; row++) {
         output << std::setfill(' ') << std::setw(9) << matrix.columns[column][row];
         output << ' ';
      }
      output << std::endl;
   }
   output << std::endl;
   NSLog(@"%s", output.str().c_str());
}

有没有人对在 Accelerate 中打印各种大小的矩阵和向量的 C/C++ 有一个通用的解决方案,或者 Apple 是否提供了我还没有找到的函数?

<simd/simd.h>没有提供此类功能。这有一些很好的理由,最重要的是人们对他们想要如何格式化他们的向量和矩阵非常自以为是,所以没有提供的格式只是一小部分用户真正想要的,而且它足够直截了当编写您自己的打印例程,完全按照您的意愿进行。可以处理任意用户定义格式的完全通用的格式化程序函数会更合理,但与 <simd/simd.h> 接口的其余部分相比会非常重量级,因此它似乎也不太适合。

就是说,如果您认为这些对 API 有用,并且您可以提供令人信服的案例来说明为什么您的首选格式是标准化的正确格式,我鼓励您报告请求该功能的 Apple 错误。