如果列表大小为1,则不带求和坐标的NumPy数组的求和列表

2024-04-19 22:00:03 发布

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

如果我有一个numpy数组列表,并希望按坐标方向添加它们:np.sum()执行此任务

sum([np.array([1, 2, 3]), np.array([6, 5, 4])])
>>> array([7, 7, 7])

但如果我的列表恰好只包含一个数组,则会发生一个新的(不需要的)情况:

sum([np.array([1, 2, 3])])
>>> 6

那么,如何使行为在所有列表大小上保持一致呢?i、 e.我想要一个函数f(),这样:

f([np.array([1, 2, 3]), np.array([6, 5, 4])])
>>> array([7, 7, 7])
f([np.array([1, 2, 3])])
>>> array([1, 2, 3])

我排除了if len(lst) > 1:类型的解决方案

提前谢谢你


Tags: 函数numpy类型列表lenifnp情况
3条回答

注意嵌套的程度:

两个阵列的列表:

In [93]: sum([np.array([1, 2, 3]), np.array([6, 5, 4])])                                       
Out[93]: array([7, 7, 7])

1个阵列的列表:

In [94]: sum([np.array([1, 2, 3])])                                                            
Out[94]: array([1, 2, 3])

一个数组,而不是一个列表

In [95]: sum(np.array([1, 2, 3]))                                                              
Out[95]: 6

数字列表:

In [96]: sum([1, 2, 3])                                                                        
Out[96]: 6

sum迭代参数,无论是列表还是数组。[93]之所以有效,是因为数组实现了自己的求和方法。它不适用于列表列表

确保内容是2d数组,概括了以下情况:

In [102]: sum(np.atleast_2d([[1, 2, 3], [6, 5, 4]]))                                           
Out[102]: array([7, 7, 7])
In [103]: sum(np.atleast_2d([np.array([1, 2, 3]), np.array([6, 5, 4])]))                       
Out[103]: array([7, 7, 7])
In [104]: sum(np.atleast_2d([np.array([1, 2, 3])]))                                            
Out[104]: array([1, 2, 3])
In [105]: sum(np.atleast_2d(np.array([1, 2, 3])))                                              
Out[105]: array([1, 2, 3])
In [106]: sum(np.atleast_2d([1, 2, 3]))                                                        
Out[106]: array([1, 2, 3])

或者使用轴0的numpy和:

In [108]: np.atleast_2d([np.array([1, 2, 3]), np.array([6, 5, 4])]).sum(axis=0)                
Out[108]: array([7, 7, 7])
In [109]: np.atleast_2d(np.array([6, 5, 4])).sum(axis=0)                                       
Out[109]: array([6, 5, 4])
我想是这样的。我们可以这样做,因为逻辑在中间,所以我们可以通过改变位置来使程序工作。

IIUC,使用轴为0的numpy.sum:

np.sum([np.array([1,2,3]),axis=0) 输出:

数组([1,2,3]) 及

np.sum([np.array([3,1,2]),np.array([6,5,4]),axis=0) 输出:

数组([7,7,7])

Numpy数组可以在任意维度上求和。您需要首先将其转换为单个阵列:

np.array([...]).sum(axis=0)

正如评论中所暗示的那样,从一开始就将其作为numpy数组处理更有意义

相关问题 更多 >