繁体   English   中英

如何以python方式处理数组列表或单个数组

[英]how to deal in a pythonic way with list of arrays or single array

我有这个问题:

在我的软件中,我正在处理单个数组或3个数组的列表(它们是像素化天空图的1或3个分量)。

如果单个数组是1个数组的列表,则无论元素数量如何,都非常容易透明地对其进行迭代。

现在,让我们说,我想方这些地图:

my_map = np.ones(100) # case of single component
# my_map = [np.ones(100) for c in [0, 1, 2]] # case of 3 components

if isinstance(my_map, list): #this is ugly
    my_map_2 = [m**2 for m in my_map]
else:
    my_map = my_map ** 2

你会如何改善这个什么建议吗?

如果返回值是单个值,则可以将其转换为list ..使用list()工厂方法。

my_map = []
temp = np.ones(100) # case of single component
# Append your temp value.. either single or a list to your empty list..
my_map.append(temp)
my_map_2 = [m**2 for m in my_map]

我假设您的方法np.ones(100)可能返回单个值甚至一个列表。

您为什么不直接创建2D数组?

my_array = np.ones((100,3), dtype=float)

这样,您可以一次直接将“三个”阵列平方。 您仍然可以按以下方式访问各个元素:

(x, y, z) = my_array.T

其中.T.transpose方法的快捷方式。

使用这种方法比在列表上循环要有效得多,尤其是如果您对三个数组应用相同的函数。 即使您想对第一个数组求平方,对第二个数组加倍并取第三个数组的平方根,也可以:

my_array[:,0] **=2
my_array[:,1] *=2
my_array[:,2] **=0.5

您尝试过numpy.asarray吗? 那么if-else就是

my_map = numpy.asarray(my_map)**2

如果您还想处理ndarrays的子类,也请查看numpy.asanyarray

我经常在函数的开头放置一个numpy.asarray调用,因此它们可以同时用于列表和数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM