Python 翻译 C saxpy

标签 python c algorithm numpy

<分区>

这是 C 代码:

btemp = (*beta)/(*beta_prev);
for (k=0; k<xsize*ysize; k++) {
  parray[k] = zarray[k] + btemp*parray[k];
}

我正在用 Python 执行以下操作:

def saxpy(a, x, y):
    return np.array([a * xi + yi for xi, yi in zip(x, y)], np.float32)
#...
btemp = beta / beta_prev
ptemp = saxpy(btemp, parray, zarray)
parray[:] = ptemp

在我的代码中,它似乎工作正常(zarrayparray 不断变化,因为它们在 while 循环中)。

但后来我做了:

btemp = beta / beta_prev
parray = saxpy(btemp, parray, zarray)

我的代码在循环中迭代几次后失败,它们不一样吗?

最佳答案

您将 parray[:] = 更改为 parray =,这不是等价的。前者在元素基础上分配 parray 的内容,如果 parray 与分配的右侧不是同一类型,这是一个重要的区别。

考虑两种情况:

>>> xs = [1, 2, 3, 4]
>>> xs[:] = tuple(2 * x for x in xs)
>>> xs
[2, 4, 6, 8]
>>> type(xs)
<class 'list'>

>>> xs = [1, 2, 3, 4]
>>> xs = tuple(2 * x for x in xs)
>>> xs
(2, 4, 6, 8)
>>> type(xs)
<class 'tuple'>

关于Python 翻译 C saxpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38015770/

相关文章:

c - 如何利用 CPU 特定功能编译 C 代码

algorithm - “Operations to consider” (ex. If, return, assign..) 计算时间复杂度时

algorithm - 使用 ELKI 进行离群值检测

algorithm - 查找使用的加密或散列方法

c - 创建反转字符串的函数时出现问题

python - 读取大型机 EBCDIC 文件

python - 将一串空格分隔的单词拆分为多行

python - 如何在 python 中通过 ssh 运行 telnet

c - C 中的魔法与 malloc、fork 和 open

python - 使用 python/PIL 自动裁剪图像