将numpy.ndarray转换为列表(Python)

时间:2014-03-13 12:00:13

标签: python numpy arcpy

我正在运行Esri开发的function以获取空间表的整数列中的值列表(但是,即使在非空间表上运行该函数,也会观察到相同的行为)。根据帮助,我应该得到NumPy结构化数组。运行该函数后,我有一个numpy数组。我以这种格式运行打印:

in_table = r"C:\geodb101@server.sde\DataTable" #
data = arcpy.da.TableToNumPyArray(in_table, "Field3")
print data

这让我在IDE中复制了这个(从IDE解释器复制/粘贴):

[(20130825,) (20130827,) (20130102,)]

我正在跑步:

allvalues = data.tolist()

得到:

[(20130825,), (20130827,), (20130102,)]

按照评论中的建议运行data.reshape(len(data)).tolist()时的结果相同。

正在运行type()让我知道第一种情况是<type 'numpy.ndarray'>,第二种情况是<type 'list'>。我希望以另一种格式[20130825, 20130827, 20130102]获取输出列表。我做错了什么或者我应该做些什么来获得指定格式的输出列表?

1 个答案:

答案 0 :(得分:3)

我有一种可行的方法,但我不能100%确定它会起作用,因为我无法弄清楚你是如何将元组编入数组的(当我尝试创建一个元组数组时,它看起来像元组被转换为数组)。无论如何,请试一试:

my_list = map(lambda x: x[0], my_np_array_with_tuples_in_it)

这假设您专门处理上面描述的单个元素元组。就像我说的那样,当我试图重新创造你的情况时,numpy做了一些我不完全理解的转换动作(不是真正的笨拙的专家)。

希望有所帮助。

更新:刚刚看到了新修改。不确定我的回答是否适用。

更新2:很高兴有效,这里有点详细说明。

Lambda基本上只是一个内联函数,并且是许多语言中常见的构造。它本质上是一个临时的,匿名的功能。你可以像这样轻松地完成这样的事情:

def my_main_func():
    def extract_tuple_value(tup):
        return tup[0]

    my_list = map(extract_tuple_value, my_np_array_with_tuples_in_it)

但正如您所看到的,lambda版本更简洁。 &#34; x&#34;在我最初的例子中相当于&#34; tup&#34;在更详细的例子中。

Lambda表达式通常仅限于非常简单的操作,基本上是一行逻辑,即返回的内容(没有显式的return语句)。

更新3:与好友聊天并进行一些研究后,列表理解绝对是可行的方法(参见Python List Comprehension Vs. Map)。

从下面的acushner评论中,你绝对可以选择:

my_list = [tup[0] for tup in my_np_array_with_tuples_in_it]