NumPy C-API:C中的标量乘法

4

我该如何用C对numpy-nd-array进行逐元素乘法运算并与一个任意的双精度标量相乘?

我正在寻找这样一个API函数:

// C-code
PyArray_MultiplyWithScalar((PyArrayObject *) myarray, double scalar_value);

相应的纯numpy代码:
# pure python
myarray = myarray * scalar_value

我的当前(不好的)解决方案是遍历所有条目并手动执行规范化。


我认为没有这样的东西。使用NpyIter_New来迭代数组。否则,您当然可以将标量值转换为数组,并通过Python调用ufunc。 - seberg
1
啊,你需要设置正确的标志,即NPY_ITER_GROWINNERNPY_ITER_EXTERNAL_LOOP以获得最佳速度,这有点复杂,但学习它可能是值得的。 - seberg
我看到了所有带有标志的迭代器,但我希望有一个更好/更短的解决方案 :-) 我认为增加优化迭代器会增加函数调用的成本... - Hensing
不,它不适用于external_loop。使用它,您将为自己实现最内层循环,并且该最内层循环通常将是整个数组。 - seberg
你有没有找到这个问题的答案? - JMzance
1个回答

0
我不知道你问题的确切答案,但如果你在C中进行循环,那应该是最快的方法。 如果你做得正确,甚至比调用Python API函数更快。 以这种方式做,你甚至可以直接在原地编辑数组,而无需额外的内存。

我认为/希望numpy有自己的最佳方式来迭代所有条目,而无需额外的内存。 - Hensing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接