Numpy - 自动隐式将np.array转换为列表

2024-05-07 15:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用另一个numpy.array来做一个蒙特卡罗模拟。我想取数组的一个元素(另一个1d数组)并对它执行一些函数,返回该数组的一个子段,然后重新分配它。最初所有数组的长度都相同,这似乎是导致问题的原因。在

我想做:例如

c1 = np.array([np.array(xi) for xi in [[1,2],[1],[1,3]]])
c1[2] = np.array([5])

这很好,因为:

^{pr2}$

当我做一个变换时,我得到了同样的结构,使所有的子数组都保持相同的长度。在

c2 = np.array([np.array(xi) for xi in [[1,2],[1],[1,3]]])
c2[1] = np.array([4,5])

给予

array([array([1, 2]), array([4, 5]), array([1, 3])], dtype=object).

相反,所发生的是:例如

当我开始所有数组的长度相同时,它们从np.arrays转换成{}。在

c3 = np.array([np.array(xi) for xi in [[1,2],[1,2],[1,4]]])

这给了

array([[1, 2], [1, 2], [1, 4]]).

如果我想调整其中一个列表的长度

c3[1] = np.array([5])

我得到广播

array([[1, 2], [5, 5], [1, 4]])

当我想要

^{9}$

性能问题

这是蒙特卡罗模拟的全部内容,通常我希望处理一个包含大约10000个子数组的数组,其中每个子数组是一个大约1000个元素的数组(float)。我一直在使用numpy,因为它的随机数生成非常快,而且它对于向量化函数有很好的性能,特别是我想对这些函数执行某种累积和(np.cumsum),以及其他一些更深奥的函数。我可以用列表来做这类事情,但是花了大约20倍的时间,我希望尽可能地优化。在

非常感谢。在


Tags: 函数innumpy元素列表fornp数组
1条回答
网友
1楼 · 发布于 2024-05-07 15:19:57

numpy不允许您更改np.数组的np.数组公司名称:

>>> c3 = np.array([np.array(xi) for xi in [[1,2],[1,2],[1,4]]])
>>> c4 = np.array([c3[:1],np.array([5]), c3[2:]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (2) into shape (1)

您可以使用dtype=np.ndarry作为np.empty

^{pr2}$

这就是你要找的吗?在

您可能只需要输入一个0或一些不会影响模拟的巨大负数/正数:

^{3}$

相关问题 更多 >