【发布时间】:2014-05-22 21:31:52
【问题描述】:
如果我有一个数值数组,由于向量长度不等,它必须使用对象指针而不是值作为数据类型:
In [145]: import numpy as np
In [147]: a = np.array([[1,2],[3,4,5]])
In [148]: a
Out[148]: array([[1, 2], [3, 4, 5]], dtype=object)
In [150]: np.sin(a)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-150-58d97006f018> in <module>()
----> 1 np.sin(a)
In [152]: np.sin(a[0])
Out[152]: array([ 0.84147098, 0.90929743])
如何在不手动遍历数组的情况下通过实际数值广播函数?
【问题讨论】:
-
几乎从不有充分的理由使用
dtype=object!在 Pythonlist上使用 numpy 数组的意义在于,它允许您加速需要通过向量化循环遍历数组元素的操作——有效地通过使用较低级别的语言执行循环来避免开销Python 中固有的。但是,使用object类型会失去这些性能优势。数组中的元素仅被视为“哑” Python 对象(在这种情况下,您的数组仅包含两个普通的lists,即带有shape=(2,))。 -
如果我知道更多关于数组代表什么,以及为什么行长不均匀,我可能会提出一个更好的解决方案。就目前而言,如果您真的非常需要一个参差不齐的数组,那么您不妨使用嵌套的
lists,这样构建起来会便宜得多。
标签: python arrays numpy broadcast