gpt4 book ai didi

python - 将列表数组转换为元组/三元组数组

转载 作者:行者123 更新时间:2023-11-30 23:18:34 28 4
gpt4 key购买 nike

我有一个 3 列的 2D Numpy 数组。它看起来像这样 array([[0, 20, 1], [1,2,1], ........, [20,1,1]]) 。它基本上是列表列表的数组。我怎样才能把这个矩阵转换成 array([(0,20,1), (1,2,1), ........., (20,1,1)]) ?我希望输出是一个三元组数组。我一直在尝试使用 Convert numpy array to tuple 中描述的元组和映射函数,

R = mydata #my data is sparse matrix of 1's and 0's
#First row
#R[0] = array([0,0,1,1]) #Just a sample
(rows, cols) = np.where(R)
vals = R[rows, cols]
QQ = zip(rows, cols, vals)
QT = tuple(map(tuple, np.array(QQ))) #type of QT is tuple

QTA = np.array(QT) #type is array
#QTA gives an array of lists
#QTA[0] = array([0, 2, 1])
#QTA[1] = array([0, 3, 1])

但是期望的输出是 QTA 应该是元组数组,即 QTA = array([(0,2,1), (0,3,1)])。

最佳答案

您的二维数组不是列表的列表,但它很容易转换为该列表

a.tolist()

正如 Jimbo 所示,您可以将其转换为带有 comprehension 的元组列表。 (map 也可以)。但是当您尝试将其包装在数组中时,您会再次获得二维数组。那是因为np.array尝试创建数据允许的尽可能大的维度数组。并且子列表(或元组)的长度都相同,这是一个二维数组。

要保留元组,您必须切换到结构化数组。例如:

a = np.array([[0, 20, 1], [1,2,1]])
a1=np.empty((2,), dtype=object)
a1[:]=[tuple(i) for i in a]
a1
# array([(0, 20, 1), (1, 2, 1)], dtype=object)

这里我创建了一个空的结构化数组,其数据类型为 object ,最一般的一种。然后我使用元组列表分配值,这是适合此任务的数据结构。

另一种数据类型是

a1=np.empty((2,), dtype='int,int,int')
....
array([(0, 20, 1), (1, 2, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])

或者一步:np.array([tuple(i) for i in a], dtype='int,int,int')

a1=np.empty((2,), dtype='(3,)int')产生二维数组。 dt=np.dtype([('f0', '<i4', 3)])产生

array([([0, 20, 1],), ([1, 2, 1],)], 
dtype=[('f0', '<i4', (3,))])

它将一维数组嵌套在元组中。所以它看起来像 object或 3 个字段是我们能得到的最接近元组数组的值。

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

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