【问题标题】:numpy C-API: scalar multiplication in Cnumpy C-API:C中的标量乘法
【发布时间】:2013-05-11 12:55:06
【问题描述】:

如何在 C 中执行 numpy-nd-array 与任意双标量的元素乘法?

我正在寻找这样的 api 函数:

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

对应纯numpy:

# pure python
myarray = myarray * scalar_value

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

【问题讨论】:

  • 我不认为有这样的事情。使用 NpyIter_New 遍历数组。否则你当然可以将 scalar_value 转换为数组并通过 python 调用 ufunc。
  • 啊,您需要设置正确的标志,即 NPY_ITER_GROWINNERNPY_ITER_EXTERNAL_LOOP 以获得最佳速度,这涉及更多内容,但可能值得学习。
  • 我已经看到所有这些带有标志的迭代器,但我希望有一个更好/更短的解决方案 :-) 我认为增加优化的迭代器会花费函数调用......
  • 不,它没有 external_loop。有了它,你就可以自己实现最里面的循环,而那个最里面的循环往往就是整个数组。
  • 你找到答案了吗?

标签: python c numpy c-api


【解决方案1】:

我不知道您的问题的正确答案,但是如果您在 C 中执行一个应该尽可能快的循环,我什至认为如果您做得对,它比调用 python api 函数更快。这样做你甚至可以在不需要额外内存的情况下就地编辑数组。

【讨论】:

  • 我认为/希望 numpy 有它自己的最佳方式来遍历所有条目而不需要额外的内存。
猜你喜欢
  • 2013-04-04
  • 2014-11-24
  • 2021-09-26
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2021-09-01
  • 2023-01-11
  • 1970-01-01
相关资源
最近更新 更多