【发布时间】:2020-07-16 23:52:21
【问题描述】:
这是我在 C 中使用的代码。它似乎是一个简单的变量交换。
#define ELEM_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }
但我看到它是这样称呼的
ELEM_SWAP(array[x], array[y]).
我正在尝试使用 numpy 数组在 Python 3 中模拟此宏。我最接近的等价物是这个函数,但似乎 C 代码交换变量,而 Python 交换列表中的项目。
def elem_swap(mylist, x, y):
mylist[x], mylist[y] = mylist[y], mylist[x]
return mylist
【问题讨论】:
-
您能否为 elem_swap 添加示例输入以及预期输出和实际输出?
-
C 代码似乎交换了变量
array[x], array[y]变量如何?它们不也是C中的数组元素吗? -
交换数组可能不同于交换列表。根据数组形状,索引项可能是视图这一事实可能会导致意外结果。使用数组列表索引可能会更好:
arr[[i,j] = arr[[j, i]], -
@steviestickman 如果给定数组 [1,2,3],传递 elem_swap(array[0], array[2]) 应该使它成为 [3,2,1],或者至少是我相信它在做什么。这是我正在查看的遗留代码,这是我假设它在我看到它的使用方式的上下文中所做的事情。
-
stackoverflow.com/questions/14836228/… 会回答您的问题吗? Python 没有宏,你永远不会使用函数来交换变量,因为你可以直接在代码中进行,而且函数调用只会干扰技术。
标签: python c python-3.x numpy