Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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数组对象的numpy数组?_Python_Arrays_Python 3.x_Numpy - Fatal编程技术网

Python 如何创建元素为其他numpy数组对象的numpy数组?

Python 如何创建元素为其他numpy数组对象的numpy数组?,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我发现自己需要创建一个dtype=“object”的numpy数组,其元素本身就是numpy数组。如果阵列长度不同,我可以做到这一点: arr_of_arrs = np.empty((2,2), dtype=np.object) arr_list = [np.arange(i) for i in range(4)] arr_of_arrs.flat[:] = arr_list print(arr_of_arrs) array([[array([], dtype=int32), array([0

我发现自己需要创建一个dtype=“object”的numpy数组,其元素本身就是numpy数组。如果阵列长度不同,我可以做到这一点:

arr_of_arrs = np.empty((2,2), dtype=np.object)
arr_list = [np.arange(i) for i in range(4)]
arr_of_arrs.flat[:] = arr_list
print(arr_of_arrs)

array([[array([], dtype=int32), array([0])],
   [array([0, 1]), array([0, 1, 2])]], dtype=object)
但是如果它们恰好是相同的长度,它就不起作用,我也不完全确定它是如何生成它给我的值的:

arr_list = [np.arange(2) for i in range(4)]
arr_of_arrs.flat[:] = arr_list
print(arr_of_arrs)

[[0 1]
[0 1]]

这是否可行?numpy似乎试图强迫数据“有意义”,尽管我尽了最大努力阻止它这样做…

如果数组是1d,则赋值工作正常:

In [767]: arr = np.empty(4,object)                                                             
In [768]: arr[:] = [np.arange(6) for _ in range(4)]                                            
In [769]: arr                                                                                  
Out[769]: 
array([array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5]),
       array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])], dtype=object)
In [770]: arr.reshape(2,2)                                                                     
Out[770]: 
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
       [array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
      dtype=object)
我们也可以从(2,2)开始,但要分配给
ravel()
(a
视图
):

flat
显然序列化了RHS:

In [774]: arr.flat = [np.arange(6) for _ in range(4)]                                          
In [775]: arr                                                                                  
Out[775]: 
array([[0, 1],
       [2, 3]], dtype=object)
如果右侧嵌套了RHS列表,则可以直接将其指定给二维阵列:

In [779]: alist = Out[770].tolist()                                                            
In [780]: alist                       # list of lists of arrays                                                         
Out[780]: 
[[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
 [array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]]
In [781]: arr = np.empty((2,2),object)                                                         
In [782]: arr[:] = alist                                                                       
In [783]: arr                                                                                  
Out[783]: 
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
       [array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
      dtype=object)

如果
arr\u of\u arrs
以一维数组开始,例如
np.empty(4,object)
,这种赋值效果会更好。如果需要,您可以稍后对其进行重塑
flat
正在对两侧进行展平和迭代,这会打乱此分配
arr\u of_arrays.ravel()[:]=…
效果也更好。@hpaulj效果很好!回答这个问题,我将投票并接受。
In [779]: alist = Out[770].tolist()                                                            
In [780]: alist                       # list of lists of arrays                                                         
Out[780]: 
[[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
 [array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]]
In [781]: arr = np.empty((2,2),object)                                                         
In [782]: arr[:] = alist                                                                       
In [783]: arr                                                                                  
Out[783]: 
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
       [array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
      dtype=object)