【发布时间】:2021-02-23 11:49:37
【问题描述】:
我现在正在研究 Cython,我需要在运行代码之前定义 NumPy 数组类型和维度。我有这些坐标 (x,y) 作为输入:
list_a = [(2, 16), (24, 26)]
list_b = [(18, 8), (30, 22)]
由于我使用 NumPy,我将列表转换为 NumPy 数组:
arr_a = numpy.array([(2, 16), (24, 26)])
arr_b = numpy.array([(18, 8), (30, 22)])
这是我用 Cython 编译的代码:
%%cython
import numpy
cimport numpy
cimport cython
ctypedef numpy.int_t DTYPE_t
def do_iter(numpy.ndarray[DTYPE_t,ndim=2] arr_a, numpy.ndarray[DTYPE_t,ndim=2] arr_b):
for a in arr_a:
for b in arr_a:
if a != b:
for i in arr_b:
for j in arr_b:
if i != j:
print(a,b,i,j)
我希望得到以下输出:
(2, 16) (24, 26) (18, 8) (30, 22)
(2, 16) (24, 26) (30, 22) (18, 8)
(24, 26) (2, 16) (18, 8) (30, 22)
(24, 26) (2, 16) (30, 22) (18, 8)
一开始出现如下错误:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 然后我修改代码为:
do_iter(arr_a.any(),arr_b.any())
但它产生了另一个错误:TypeError: Argument 'arr_a' has incorrect type (expected numpy.ndarray, got numpy.bool_) 我怀疑我定义了错误的 NumPy 类型或维度。任何帮助表示赞赏,谢谢!
【问题讨论】: