在ArrayFire中将向量分量与数组相乘

布鲁斯·迪恩

尝试将向量分量与数组相乘(逐元素乘法或广播)时出现错误。文档显示*的这种重载大小写应该很好:

AFAPI数组运算符*(const float&lhs,const array&rhs)将
两个数组或一个数组和一个值相乘。(const array&,const array&)

但是,根据下面的错误消息,也许vect(0)需要进一步展平或缩小以使尺寸一致?

错误语句很清楚:

参数1的尺寸无效预期:ldims == rides


下面是代码:

#include <arrayfire.h>

int main(int argc, char *argv[])
{
    int device = argc > 1 ? atoi(argv[1]) : 0;
    af::setDevice(device);
    af::info();

    int n = 3;
    int N = 5;

    // Create the arrays:
    af::array matrix = af::constant(0,n,n,f32); // 3 x 3 float array of zeros
    af::array vect = af::seq(1,N); // A col vector of floats: {1.0, ... ,5.0}

    // Show the arrays:
    af_print(matrix);
    af_print(vect);

    // Print a single component of the vector:
    af_print(vect(0));

    // This line produces the error (see below):
    af_print(vect(0) * matrix); // Why doesn't this work?

    // But somthing like this is fine:
    af_print(1.0 * matrix);

    return 0;
}

产生输出:

ArrayFire v3.3.2
ATI Radeon HD 6750M

矩阵
[3 3 1 1]
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000

vect
[5 1 1 1]
1.0000
2.0000
3.0000
4.0000
5.0000

vect(0)
[1 1 1 1]
1.0000

矩阵的af_print()的dims()输出= [3 3 1 1],而vect(0)= [1 1 1 1],这使我感到怀疑,但是我不确定如何进一步展平。有人会认为此示例是使用ArrayFire API的一种常见方式。

引发的错误异常是:

libc ++ abi.dylib:以af :: exception类型的未捕获异常终止:ArrayFire异常(无效输入大小:203):在函数getOutDims中在文件src / backend / ArrayInfo.cpp:173中
,参数1的尺寸无效预期:ldims ==游骑
在函数af :: array af :: operator *(const af :: array&,const af :: array&)


添加一个用例来说明:实际上,我是通过求和coeff(k)*(3-d数组Z的2d切片)来构造最终数组:

for (int j = 0; j<indx.dims(0); ++j)
  final += coeff(indx(j)) * Z(af::span,af::span,indx(j));

我将研究使用a,gfor但最初只是想获得正确的数值输出。还应注意向量:index是预定义的,例如,sayindex = {1, 2, 4, 7, ...}和元素不一定按顺序排列;这样可以选择特定的术语。

帕万·亚拉曼奇利(Pavan Yalamanchili)

自从上次回答以来,OP就添加了一个用例,因此这就是在arrayfire中编写完全矢量化版本的方式。

array coeffs = moddims(coeff(indx), 1, 1, coeff.elements());
array final = sum(Z(span, span, indx) * tile(coeffs, Z.dims(0), Z.dims(1)), 2);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

选择数组中向量的分量

来自分类Dev

向量数组彼此相乘

来自分类Dev

将矩阵数组与向量相乘

来自分类Dev

在R中将两组向量相乘

来自分类Dev

如何在opencv中将标量与向量相乘

来自分类Dev

numpy:将矩阵与向量数组相乘

来自分类Dev

numpy:将矩阵与向量数组相乘

来自分类Dev

在C中将整数与指针数组的元素相乘

来自分类Dev

在 C++ 中将数组的值相乘并显示

来自分类Dev

在Calc元素中将两个向量相乘

来自分类Dev

在Matlab中将单元格元素与向量相乘

来自分类Dev

如何在Ruby中将两个数组相乘?

来自分类Dev

在C#中将数组中的不同数据类型相乘

来自分类Dev

如何在javascript中将数字数组中的值相乘?

来自分类Dev

在OpenCV中将Mat转换为数组/向量

来自分类Dev

向量元素彼此相乘

来自分类Dev

向量元素彼此相乘

来自分类Dev

不等向量相乘之和

来自分类Dev

尝试在C ++中将两个动态创建的矩阵(2D向量)相乘

来自分类Dev

在Excel中将值相乘

来自分类Dev

以向量化方式将维数为5的两个数组相乘

来自分类Dev

Python:将两列nd数组相乘以获得相同尺寸的向量?

来自分类Dev

Python:将两列nd数组相乘以获得相同维数的向量?

来自分类Dev

获取GLSL中向量的按分量最大

来自分类Dev

在向量的每个分量之后添加“ \\ \ hline”

来自分类Dev

如何在另一个double中将double数组相乘?

来自分类Dev

如何在 C++ 中将两个数组相乘并重复加法?

来自分类Dev

如何在Java中将两个一维数组的对应值相乘?

来自分类Dev

将n个3x3旋转矩阵的数组与3个向量的3d数组相乘