我有以下矩阵。
data = np.matrix([[0,0.5,0.3,0.4,0.5,0.6], [0,2,3,4,5,6],[0,2.2,3.5,4.4,5.5,6.5]])
我想创建两个列表,其中包含矩阵中的每个元素及其对应的索引作为字符串。 我的预期输出如下:
list1 = [0,0.5,0.3,0.4,0.5,0.6,0,2,3,4,5,6,0,2.2,3.5,4.4,5.5,6.5]
list2 = ['0-0','0-1','0-2','0-3','0-4','0-5',
'1-0','1-1','1-2','1-3','1-4','1-5',
'2-0','2-1','2-2','2-3','2-4','2-5']
有人可以建议吗? 如果可能的话,我想为上述过程创建一个函数。
谢谢
压缩。
答案 0 :(得分:1)
对于numpy
数组,您可以执行以下操作:
data = np.array([[0,0.5,0.3,0.4,0.5,0.6], [0,2,3,4,5,6],[0,2.2,3.5,4.4,5.5,6.5]])
list1 = data.ravel().tolist()
# [0.0, 0.5, 0.3, 0.4, 0.5, 0.6, 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.0, 2.2, 3.5, 4.4, 5.5, 6.5]
您可以使用生成器遍历子列表的不同长度:
g = (range(len(i)) for i in data)
使用列表理解构建坐标列表,并使用字符串格式获取所需的输出:
list2 = [f'{x}-{y}' for x in range(len(data)) for y in next(g)]
#['0-0', '0-1', '0-2', '0-3', '0-4', '0-5', '1-0', '1-1', '1-2',
# '1-3', '1-4', '1-5', '2-0', '2-1', '2-2', '2-3', '2-4', '2-5']
另一种替代方法是使用scipy.sparse.csr_matrix
:
from scipy.sparse import csr_matrix
list1 = sm.toarray().ravel().tolist()
list2 = list(zip(*sm.nonzero()))
# [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 1), (1, 2), (1, 3), (1, 4),
# (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5)]
答案 1 :(得分:1)
您可以遍历元素-
def createlist(data):
ls1=[]
ls2=[]
for i in range(data.shape[0]):
for j in range(data.shape[1]):
ls1.append(data[i, j])
ls2.append(str(i)+ "-" + str(j))
return ls1, ls2
使用矩阵调用此函数-
createlist(data)
答案 2 :(得分:1)
这是使用NumPy做到这一点的一种方法:
import numpy as np
data = np.matrix([[ 0, 0.5, 0.3, 0.4, 0.5, 0.6],
[ 0, 2, 3, 4, 5, 6],
[ 0, 2.2, 3.5, 4.4, 5.5, 6.5]])
ind = np.indices(data.shape).astype(str)
list1 = data.ravel().tolist()[0]
list2 = np.char.add(np.char.add(ind[0], '-'), ind[1]).ravel().tolist()
print(list1)
print(list2)
输出:
[0.0, 0.5, 0.3, 0.4, 0.5, 0.6, 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.0, 2.2, 3.5, 4.4, 5.5, 6.5]
['0-0', '0-1', '0-2', '0-3', '0-4', '0-5', '1-0', '1-1', '1-2', '1-3', '1-4', '1-5', '2-0', '2-1', '2-2', '2-3', '2-4', '2-5']
答案 3 :(得分:0)
您可以在上面的更改中使用上述答案-
list2 = ['{}-{}'.format(x,y) for x in range(len(data)) for y in [len(i) for i in data]