【问题标题】:TypeError: Argument has incorrect type (expected numpy.ndarray, got numpy.bool_)TypeError:参数类型不正确(预期为 numpy.ndarray,得到 numpy.bool_)
【发布时间】: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 类型或维度。任何帮助表示赞赏,谢谢!

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    要解决您遇到的第一个错误,您必须使用.any() 包装比较而不是更改输入。

    ...
    if (a!=b).any():
    ...
    if (i!=j).any():
    ...
    

    这个错误是因为a!=b 会给你类似(True, False) 的东西,因为它比较了 2 个 1x2 数组。如果您希望条件为 True 如果 2 个元素中的任何一个不同,请使用 .any() ,如上所示。但是,如果您希望条件为 True 如果两个元素都必须不同,请将上面的内容更改为 .all()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      相关资源
      最近更新 更多