在 ArrayFire 中,af::span
是一个特殊的对象,它用于表示数组的全部范围。当你想要选择数组的一个维度中的所有元素时,可以使用 af::span
。
以下是一些使用 af::span
的示例:
选择整个维度
#include <arrayfire.h>
#include <iostream>
int main()
{
// 初始化ArrayFire
af::setDevice(0);
// 创建一个3x3的数组
af::array A = af::randu(3, 3);
// 使用 af::span 选择整个第一维度(行)
af::array allRows = A(af::span, 1); // 选择第二列的所有行
// 使用 af::span 选择整个第二维度(列)
af::array allCols = A(1, af::span); // 选择第二行的所有列
// 打印结果
std::cout << "Original array:" << std::endl;
af_print(A);
std::cout << "All rows of the second column:" << std::endl;
af_print(allRows);
std::cout << "All columns of the second row:" << std::endl;
af_print(allCols);
return 0;
}
切片操作
// 创建一个4x4的数组
af::array B = af::randu(4, 4);
// 使用 af::span 选择第一维度的部分范围和第二维度的全部范围
af::array subArray = B(af::seq(1, 3), af::span); // 选择第二到第四行,所有列
在多维数组中应用
af::span
也可以用于多维数组,比如一个三维数组:
// 创建一个4x4x4的三维数组
af::array C = af::randu(4, 4, 4);
// 选择所有页(page)、第二行和第三列
af::array subVolume = C(2, 3, af::span);
在这个例子中,af::span
被用来选择三维数组中的所有“页”。
使用 af::span
可以非常方便地处理数组的切片和子集,而无需显式地指定索引范围。这在进行数组操作时非常有用,尤其是当你想要对数组的某个维度进行操作而不关心其他维度时。