我对 Python 的矩阵制作功能有一些奇怪的问题。
我有以下列表:
Test01 = [11,25,53,19]
Test02 = [2,6,4,8]
我想编写一个代码,将每个元素添加到每个列表中,如下所示:
11 + 2, 11 + 6, 11 + 4, 11+ 8
25 + 2, 25 + 6
等等。等等
下面是我写的代码
for i in test01:
c = [i+x for x in test02]
print(c)
这是我从中得到的结果(也是我想要的)。
[13,17,15,19]
[27,31,29,33]
[55,59,57,61]
[21,25,23,27]
现在我有一个大数据集并进行了一些计算。我选择的前两行进行相同的计算(即相同类型的矩阵)。 然而,Python 只会像这样添加:
New_list01 = 1, 2, 3, 4
New_list02 = a,b,c,d
[[1+a, 2+ b, 3+ c, 4+ d]]
只有一行而不是预期的四行 为什么是这样? 我将列表转换为 numpy (.to_numpy) 并转换为列表 (.tolist())。仍然是相同的(错误的)答案。 我怎样才能仍然进行我想要的计算?
感谢您的帮助! (顺便说一句,如果有一个内置函数可以执行我正在寻找的任务,那就更好了。)
最佳答案
您只需在一行中使用列表理解 即可完成此操作。不确定您到底想要什么输出,因此添加几个选项:
>>> New_list01 = [1, 2, 3, 4]
>>> New_list02 = ['a','b','c','d']
>>> out = [[i+str(j) for i in New_list02] for j in New_list01]
>>> print(out)
[['a1', 'b1', 'c1', 'd1'],
['a2', 'b2', 'c2', 'd2'],
['a3', 'b3', 'c3', 'd3'],
['a4', 'b4', 'c4', 'd4']]
>>> out = [[i+str(j) for i in New_list02] for j in New_list01]
>>> print(out)
[['a1', 'b1', 'c1', 'd1'],
['a2', 'b2', 'c2', 'd2'],
['a3', 'b3', 'c3', 'd3'],
['a4', 'b4', 'c4', 'd4']]
>>> out = [[str(j) + i for i in New_list02] for j in New_list01]
[['1a', '1b', '1c', '1d'],
['2a', '2b', '2c', '2d'],
['3a', '3b', '3c', '3d'],
['4a', '4b', '4c', '4d']]
>>> out = [[str(j) + '+' + i for i in New_list02] for j in New_list01]
[['1+a', '1+b', '1+c', '1+d'],
['2+a', '2+b', '2+c', '2+d'],
['3+a', '3+b', '3+c', '3+d'],
['4+a', '4+b', '4+c', '4+d']]
>>> out = [[i + '+' + str(j) for i in New_list02] for j in New_list01]
[['a+1', 'b+1', 'c+1', 'd+1'],
['a+2', 'b+2', 'c+2', 'd+2'],
['a+3', 'b+3', 'c+3', 'd+3'],
['a+4', 'b+4', 'c+4', 'd+4']]
>>> # Filtering out one row
>>> out[0]
['a+1', 'b+1', 'c+1', 'd+1']
如果你想要一个flattened
(一个列表)输出:
>>> just remove inner []
>>> out = [i+ '+' + str(j) for i in New_list02 for j in New_list01]
>>> print(out)
['a+1', 'a+2', 'a+3', 'a+4', 'b+1', 'b+2', 'b+3', 'b+4', 'c+1', 'c+2', 'c+3', 'c+4', 'd+1', 'd+2', 'd+3', 'd+4']
>>> out = [i + str(j) for i in New_list02 for j in New_list01]
>>> print(out)
['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4', 'c1', 'c2', 'c3', 'c4', 'd1', 'd2', 'd3', 'd4']
对于您的初始测试用例:
>>> out = [[i+j for i in Test02] for j in Test01]
>>> print(out)
[[13, 17, 15, 19],
[27, 31, 29, 33],
[55, 59, 57, 61],
[21, 25, 23, 27]]
>>> #first row
>>> print(out[0])
[13, 17, 15, 19]
>>> out = [[i+j for i in Test02] for j in Test01]
[13, 27, 55, 21, 17, 31, 59, 25, 15, 29, 57, 23, 19, 33, 61, 27]
关于Python无法进行矩阵求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64093065/