numpy数组中len()与__len__()的比较

2 投票
1 回答
622 浏览
提问于 2025-04-28 16:14

这里发生了什么?我怎么能检查一下 a 的长度呢?

>>> import numpy as np
>>> a = np.array(3)
>>> hasattr(a , '__len__')
True
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: len() of unsized object

在这里,Python认为 a 是没有长度的:

>>>a.shape
()

我正在使用 Python 2.7.3 和 numpy 1.8.0。

谢谢。

暂无标签

1 个回答

1

嗯,也许我这里有点理解错了,但你为什么不检查一下类型呢?

import numpy as np

def make_ary(item):
    if not isinstance(item, list):
        ary = np.array([item])
    else:
        ary = np.array(item)
        ary = ary.ravel()
    return ary

然后:

a = [1,2,3]
b = 3
c = [ [1] , [2] ,[3] ]


>> make_ary(a)
array([1, 2, 3])

>> make_ary(b)
array([3])

>> make_ary(c)
array([1, 2, 3])

撰写回答