Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy-np.Array到列表的自动隐式转换_Python_Arrays_List_Numpy_Implicit Conversion - Fatal编程技术网

Python Numpy-np.Array到列表的自动隐式转换

Python Numpy-np.Array到列表的自动隐式转换,python,arrays,list,numpy,implicit-conversion,Python,Arrays,List,Numpy,Implicit Conversion,我正在尝试制作一个其他numpy.array的numpy.array,用于蒙特卡罗模拟。我想获取数组的一个元素(另一个1d数组)并对其执行一些函数,返回该数组的一个子部分,然后重新分配它最初所有数组的长度都相同,这似乎是导致问题的原因 我想做的事:例如 c1 = np.array([np.array(xi) for xi in [[1,2],[1],[1,3]]]) c1[2] = np.array([5]) 这很好用: array([array([1, 2]), array([1]), ar

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

我想做的事:例如

c1 = np.array([np.array(xi) for xi in [[1,2],[1],[1,3]]])
c1[2] = np.array([5])
这很好用:

array([array([1, 2]), array([1]), array([5])], dtype=object)
当我做一个变换,使所有的子数组保持相同的长度时,我得到了相同的结构

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).
相反,所发生的是:例如

c1 = np.array([np.array(xi) for xi in [[1,2],[1],[1,3]]])
c1[2] = np.array([5])
当我启动所有长度相同的数组时,它们将从
np.arrays
转换为
list

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]])
当我想要的时候

性能问题

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


非常感谢。

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)
这就是你要找的吗

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

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

您是否测试了np.array列表的性能,而不是np.array的np.array?我建议重新考虑该方法。不同长度的数组看起来奇怪、不方便,而且可能很慢。@kennytm我还没有测试它的性能,因为我通过以下方式使用了
np.insert
np.insert(np.array([many_np_数组]),0,x0,axis=1)。求和(axis=1))
其中
x0
是一组初始条件,然后我使用
.cumsum
将这些值转换为累积值。使用这个
np.insert
来添加初始条件非常有用,而不是为循环创建
然后执行某种
x0.append(etc)
。本质上,我还想保留
np.array
s的功能。我希望这是清楚的。@ev br我正在考虑使用
熊猫数据帧
,然后执行行和列操作,但我担心性能速度,因为要施加我想要的边界条件,我需要执行许多行搜索算法,我担心这些算法可能无法很好地矢量化,当我执行这些行时,我不知道它们将被视为什么类型的对象(
list
np.array
pd.series
,等等)。注意它将
dtype=np.array
变成
dtype=object
。这种数组包含指向任何类型对象的指针;这个解决方案正是我想要的!我的意思是我必须比我最初设想的多做几行代码和一些额外的串联/嵌套操作(只有几个!),但现在我看到的性能比最初的
列表
方法提高了40倍,其中,作为我最初的
np.array
列表
方法(问题中的概述)只给出了20个改进因子(我只说…)。感谢@KennethTry
c3[…]=ourList
填充对象数组。
>>> c3 = np.array([np.array(xi) for xi in [[1,2],[1,2],[1,4]]])
>>> c3[1] = np.array([5])
>>> c3
array([[1, 2],
       [5, 5],
       [1, 4]])
>>> c3[1][1] = -9999999
>>> c3
array([[       1,        2],
       [       5, -9999999],
       [       1,        4]])