【问题标题】:TypeError: only size-1 arrays can be convertedTypeError:只能转换大小为 1 的数组
【发布时间】:2019-09-14 12:35:39
【问题描述】:

我正在尝试将以下内容转换为整数

我有一个变量 p,它在下面

array([0.09641092, 0.02070604, 0.21679783, ..., 0.06453979, 0.02907993, 0.12129478])

我想根据阈值转换数字

thres = 0.5

然后转换

p1 = np.int(p > thres)

但我得到以下错误

TypeError:只有 size-1 的数组可以转换为 Python 标量

【问题讨论】:

    标签: python pandas numpy numpy-ndarray


    【解决方案1】:
    import numpy as np
    a = np.array([0.09641092, 0.02070604, 0.21679783, 0.06453979, 0.02907993, 0.12129478])
    t = 0.05
    for i in range(len(a)):
    if(a[i]>t):
        print(a[i])
    

    输出:

    0.09641092
    0.21679783
    0.06453979
    0.12129478
    

    print(np.int(a[i]))
    

    输出:

    0
    0
    0
    0
    

    【讨论】:

    • 我认为这不能回答 OP(原始发帖人)提出的问题。他们想要更改所有值,而不仅仅是基于阈值进行选择。
    【解决方案2】:

    np.int 只是int,普通的 Python 内置类型。我认为它甚至只是在 numpy 命名空间中以实现向后兼容性。它不是 NumPy 类型,不能通过调用对数组进行类型转换。

    np.int_ 是 dtype int 值默认转换为的 NumPy 类型,当您执行 some_array.astype(int) 之类的操作时使用它。它对应于 Clongnp.int_,您可以调用对整个数组进行类型转换:

    >>> x = numpy.array([True, False, True])
    >>> numpy.int_(x)
    array([1, 0, 1])
    

    但更常用的是astype

    >>> x.astype(int)
    array([1, 0, 1])
    

    【讨论】:

      【解决方案3】:

      你想转换数组的类型。因此,改为这样做:

      (p > thres).astype(np.int)
      

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 2018-07-22
        • 2021-06-24
        • 2019-02-27
        • 2021-11-29
        • 2019-05-02
        • 1970-01-01
        • 2019-06-19
        • 2020-08-09
        相关资源
        最近更新 更多