繁体   English   中英

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

[英]Convert numpy.ndarray to list (Python)

我正在运行由Esri开发的函数 ,以获取空间表的整数列中的值列表(但是,即使在非空间表上运行该函数,也会观察到相同的行为)。 根据帮助,我应该获得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 'numpy.ndarray'> <type 'list'> 我期望以其他格式获取输出列表[20130825, 20130827, 20130102] 我做错了什么或者我应该怎么做才能获得指定格式的输出列表?

我有一种可能的方法,但是我不能100%地确定它会工作,因为我无法弄清楚如何将元组放入数组中(当我尝试创建元组数组时,看起来元组已转换数组)。 无论如何,试一下:

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

假定您正在专门处理上面描述的单元素元组。 就像我说的那样,当我尝试重新创建您的情况时,numpy做了一些我不完全理解的转换动作(不是真正的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版本更为简洁。 在我最初的示例中,“ x”等效于更详细的示例中的“ tup”。

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

更新3:与好友聊天并进行了一些研究之后,列表理解绝对是必经之路(请参阅Python列表理解与Map )。

从下面的acushner的评论中,您绝对可以改用它:

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

暂无
暂无

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

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