【问题标题】:error extracting element from an array. python从数组中提取元素时出错。 Python
【发布时间】:2012-03-21 23:15:37
【问题描述】:

我有一个类似这样的 numpy 数组

a = np.array(1)

现在,如果我想从这个数组中取回 1。我如何检索这个??

我试过了

a[0], a(0).. 

喜欢

IndexError: 0-d arrays can't be indexed

或

TypeError: 'numpy.ndarray' object is not callable

我什至尝试做一些奇怪的扁平化之类的东西,但我很确定它不应该那么复杂.. 而且我在这两个方面都遇到了错误。我想要的只是 1 作为 int 吗? 谢谢

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    你用什么来创造

    a = np.array(1)
    

    是一个零维数组,它们不能被索引。您也不需要需要对其进行索引——您可以直接使用a,就好像它是一个标量值一样。如果您确实需要不同类型的值,例如float,您可以使用float(a) 显式转换它。如果需要在数组的基类型中使用,可以使用a.item() 或a[()]。

    注意零维数组是可变的。如果您更改数组中单个条目的值,这将通过对您存储的数组的所有引用可见。如果要存储不可变值,请使用 a.item()。

    如果您想要一个包含单个元素的一维数组,请使用

    a = np.array([1])
    

    您现在可以使用a[0] 访问单个元素。

    【讨论】:

    • 我在这里添加了一个搜索词:nditer。我还没有与 numpy 合作太多,所以我被 nditer 卡住了,它为我提供了 0-d 数组而不是对象。无论如何,谢谢你的解决方案!
    • 如果a=np.array(abs)怎么样?我该如何使用它(a(1) 给出TypeError: 'numpy.ndarray' object is not callable)?使用 select 而不是分段来解决这个问题。黑客是a.ravel()[0]。有没有更好的办法?
    • a.item() 和 a.itemset( ... ),如前所述,分别由答案文本建议。
    • 您不能使用它,因为它是标量值,因为它不是标量值。直接使用它(例如,将“值”附加到列表中)可能会导致意外错误,因为您仍在使用对原始数组的引用,如果它更改了它的值,那么无论您使用引用(例如我的示例中的列表)。
    • a.item() 和 a[()](或类似的a.min())不同之处在于前者创建一个 Python 对象来保存该值,而后者返回一个 Numpy dtype 的对象。比较 type(a.item()) 与 type(a[()])。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多