将MATLAB
程序改写Python
程序时,需要将在MATLAB
中已经用手敲好的矩阵改写为Numpy
中的格式,当矩阵维度不小时,任务量大且易出错。遂想到写一小段Python
代码以实现之。代码如下:
import re
def matrix2numpy(matrix_str):
num_str = ''
mat_str = matrix_str.strip()
mat_rows_list = mat_str.split(';')
for i in range(len(mat_rows_list)-1):
row = mat_rows_list[i]
row_str = ''
row_str_list = re.split(',|\s', row.strip())
for j in range(len(row_str_list)-1):
row_str += row_str_list[j]+', '
row_str += row_str_list[-1]
if i == 0:
num_str += '['+row_str+'],\n'
else:
num_str += '\t['+row_str+'],\n'
return '['+num_str+']'
输入与输出:
输入是一个字符串,请直接将MATLAB
中的矩阵内容,即两个方括号中的内容(不包括方括号)复制一下,在Python
这边放在两个'''
之间,形成一个字符串,即
'''你复制的内容'''
使用
'''
是因为MATLAB
中矩阵每行之后一般都会换行。
MATLAB
矩阵空格、逗号分隔都是可以的。
举例如下:
mat = '''1/4 1/4 1/4 1/4;1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
0 0 0 0;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
0 0 0 0;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
1/4 1/4 1/4 1/4;
0 0 0 0;
'''
num = matrix2numpy(mat)
print(num)
结果为:
[[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[0, 0, 0, 0],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[0, 0, 0, 0],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[1/4, 1/4, 1/4, 1/4],
[0, 0, 0, 0],
]
此时便可直接将生成的结果放在np.array()
括号内了。