我一直在使用numpy数组进行一些计算,并得出了以下问题:
<class 'numpy.ndarray'>和numpy.ndarray
我注意到以下操作仅适用于<class 'numpy.ndarray'>:(arrray == 1).sum()
为什么是这样?
发布于 2022-03-16 22:42:26
没什么区别,他们是一样的。
numpy.ndarray是numpy数组的实际类型;<class 'numpy.ndarray'>是numpy.ndarray的字符串表示形式。
>>> import numpy as np
>>> a = np.array([1, 2, 3])
array([1, 2, 3])
>>> print(type(a) == np.ndarray)
True
>>> np.ndarray
<class 'numpy.ndarray'>
>>> print(type(a))
<class 'numpy.ndarray'>
>>> str(type(a))
"<class 'numpy.ndarray'>"
>>> repr(type(a))
"<class 'numpy.ndarray'>"Python解释器,如IPython和IPython(实际上下面是相同的东西)将修剪<class '...' >部件,并且只在输入类型into解释器时显示类型本身,例如,
$ ipython
Python 3.9.9 (main, Nov 21 2021, 03:23:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.1.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import numpy as np
In [2]: np.ndarray
Out[2]: numpy.ndarray...versus python (内置解释器):
$ python3
Python 3.9.9 (main, Nov 21 2021, 03:23:44)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.ndarray
<class 'numpy.ndarray'>...but --它们是完全相同的类型。
发布于 2022-03-17 00:43:11
我想知道您是否混淆了numpy数组和python列表。我/我们经常谈论numpy数组,实际上是一个类/类型np.ndarray的对象。
In [144]: a = [1, 2, 3] # a list
In [145]: b = np.array(a) # an array
In [146]: type(a), type(b)
Out[146]: (list, numpy.ndarray)表达式适用于数组,但不适用于列表:
In [147]: (b == 1).sum()
Out[147]: 1
In [148]: (a == 1).sum()
Traceback (most recent call last):
Input In [148] in <module>
(a == 1).sum()
AttributeError: 'bool' object has no attribute 'sum'
In [149]: b == 1
Out[149]: array([ True, False, False])
In [150]: a == 1
Out[150]: False请注意,我使用b创建了np.array()。有一个np.ndarray函数,但我们通常不使用它--它是我们大多数人都不需要的低级创建者。有用的起始页:
https://stackoverflow.com/questions/71505039
复制相似问题