Apple 是否没有提供类似于“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>
接口(interface)的其余部分相比,它的重量会非常大,因此它似乎也不太合适。
也就是说,如果您认为这些将作为 API 有用,并且您可以为为什么您的首选格式适合标准化提供令人信服的理由,我鼓励您向 Apple 报告请求该功能的错误。
关于ios - NSLog matrix_float4x4 或 simd::float4x4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29533104/