numpy.array(value)
计算结果为true,如果值是int
,float
或complex
。结果似乎是一个无形的数组(numpy.array(value).shape
return ()
)。
像这样对上面的内容进行重塑numpy.array(value).reshape(1)
可以很好地工作,并将其numpy.array(value).reshape(1).squeeze()
反转,然后再次形成无形的数组。
这种行为背后的原理是什么?该行为存在哪些用例?
当您创建像这样的零维数组时np.array(3)
,您将获得一个对象,该对象在99.99%的情况下均表现为数组。您可以检查基本属性:
>>> x = np.array(3)
>>> x
array(3)
>>> x.ndim
0
>>> x.shape
()
>>> x[None]
array([3])
>>> type(x)
numpy.ndarray
>>> x.dtype
dtype('int32')
到现在为止还挺好。其背后的逻辑很简单:可以通过将其包装在调用中,以相同的方式处理任何类似于数组的对象,而不管它是数字,列表还是数组np.array
。
要记住的一件事是,当您为数组建立索引时,索引元组必须具有ndim
或更少的元素。所以你不能做:
>>> x[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
相反,您必须使用大小为零的元组(因为x[]
语法无效):
>>> x[()]
3
您还可以将数组用作标量:
>>> y = x + 3
>>> y
6
>>> type(y)
numpy.int32
将两个标量相加会产生的标量实例,而dtype
不是另一个数组。话虽y
如此x
,由于dtypes继承自,因此您可以以与99.99%的时间完全相同的方式使用此示例ndarray
。没关系的3
是Python int
,因为无论如何np.add
都会将它包装起来array
。y = x + x
将产生相同的结果。
之间的一个区别x
,并y
在这些例子是,x
在没有正式被认为是一个标量:
>>> np.isscalar(x)
False
>>> np.isscalar(y)
True
索引问题可能会在计划索引任何数组类似对象的计划中给您带来麻烦。您可以通过将其ndmin=1
作为构造函数的参数或使用来轻松解决它reshape
:
>>> x1 = np.array(3, ndmin=1)
>>> x1
array([3])
>>> x2 = np.array(3).reshape(-1)
>>> x2
array([3])
我通常建议使用前一种方法,因为它不需要输入维数的先验知识。
进一步阅读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句