如何解决访问 numpy.ndarray 字段的内容
我从 python 中的 sympy lambdify
函数创建了一个 ndarray,我需要的实际值隐藏在我的结果变量的这个数组字段中。需要明确的是,array
沿 axis=0
的每个索引对应于特定时刻的 7 阶时间多项式的一阶导数:
在我的 lambdify 函数中,我传递了一个大小为 33 的元素时间向量,并期望得到一个 8x33 或 33x8 的结果,但结果却将我的输出推送到了这个数组字段,我无法访问它。现在,我只能通过执行 result[0]
、result[1]
等来访问它,但这很乏味,因为我一次只能访问所有内容,这意味着循环是访问所有内容的唯一方法.这不是我期望 ndarray 的行为:
有人能解释一下这里发生了什么吗,如果可能的话,我如何访问这个数组字段,以便我可以对任何后续操作进行矢量化?我的目标是沿轴 = 0 堆叠数组中的每个元素并计算后续导数并根据它们各自的时间堆叠它们。
解决方法
doc
函数的 lambdified
显示了实际的 numpy
代码。有时看看它会有所帮助。
破译您的 png
需要一些时间(我们通常不喜欢 SO 上的那些)。我猜这是 pydev
数组的 result
显示。它看起来像一个形状 (8,) 对象数据类型数组。大部分元素是形状(33,)数组,但最后2个是标量。
np.stack(result[:6])
应该产生一个 (8,33) 数字 dtype 数组。
对象 dtype 数组很像一个列表,引用不同的元素。
看看你的多项式,我猜lambdified函数返回类似:
np.array([7*t**6,...,2*t,1,0])
虽然其中 6 个术语包含 t
,但最后 2 个不包含。包含 t
的项将产生一个 (33,) 数组。 sympy.lambdify
是一个相对简单的函数,执行从 sympy
到 numpy
的词法翻译。它对 numpy
没有“深刻”的理解。
示例:
In [25]: exp = (3*t**3,2*t**2,1*t,1.0,0)
In [26]: f = lambdify(t,exp)
In [27]: print(f.__doc__)
Created with lambdify. Signature:
func(t)
Expression:
(3*t**3,t,0)
Source code:
def _lambdifygenerated(t):
return ((3*t**3,0))
In [28]: f(np.arange(3))
Out[28]: (array([ 0,3,24]),array([0,2,8]),2]),0)
In [29]: np.array(_)
<ipython-input-29-7a2cd91c32ca>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this,you must specify 'dtype=object' when creating the ndarray.
np.array(_)
Out[29]:
array([array([ 0,0],dtype=object)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。