gpt4 book ai didi

python - 转换为 numpy 数组的元组列表

转载 作者:行者123 更新时间:2023-11-30 22:28:38 25 4
gpt4 key购买 nike

我有一个元组列表,其中一个是对象,另一个是通用的。当我运行 np.asarray(list_in) 时,结果是一个二维数组,元组在一行中转换。但是我想获得一个由元组组成的一维数组。

我可以传递一个dtype来强制它,如果我尝试这个简约的例子,它会很好地工作

a = [(1,2),(3,4)]
b = np.asarray(a,dtype=('float,float'))
print b
[( 1., 2.) ( 3., 4.)]

但是我如何获取列表的第一个元素并从中构造一个正确的dtypetype(list_in[0]) 返回 tuple 并将其传递给 asarray 不起作用。

最佳答案

使用这个元组列表,您可以创建 3 种数组:

In [420]: a = [(1,2),(3,4)]

二维数组,具有从输入推断的数据类型(但也可以指定为类似 float 的形式)。输入的大小匹配。

In [421]: np.array(a)
Out[421]:
array([[1, 2],
[3, 4]])

结构化数组。 1d 有 2 个字段。按名称进行字段索引。输入必须是元组列表(而不是列表列表):

In [422]: np.array(a, dtype='i,i')
Out[422]:
array([(1, 2), (3, 4)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [423]: _['f0']
Out[423]: array([1, 3], dtype=int32)

在结构化数组中,输入和显示都使用元组,但数据实际上并不是以元组的形式存储的。这些值被打包为字节 - 在本例中 8 个字节代表 2 个整数。

对象数组。这是带有元组内容的一维。内容可以是其他任何内容。这是一个增强/降低的列表。

In [424]: A = np.empty((2,), dtype=object)
In [425]: A[:] = a
In [426]: A
Out[426]: array([(1, 2), (3, 4)], dtype=object)
In [427]: A.shape
Out[427]: (2,)
In [428]: A[1]
Out[428]: (3, 4)

Out[428] 是一个实际的元组。尝试修改它,A[1][0]=30,会引发错误。

在最后一种情况下,A = np.empty(2, dtype=tuple) 做了同样的事情。除了整数、 float 、字符串等之外的任何东西都会“转换”为“对象”。

仅仅指定对象数据类型没有帮助。结果是带有数字元素的 2d(但存储为对象指针)。

In [429]: np.array(a, dtype=object)
Out[429]:
array([[1, 2],
[3, 4]], dtype=object)
In [430]: _.shape
Out[430]: (2, 2)

有关创建对象数据类型数组的更多信息,请访问

numpy ravel on inconsistent dimensional object

关于python - 转换为 numpy 数组的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com