我正在尝试将 MATLAB 代码转换为 Python。我不知道如何在Python中初始化空矩阵。
MATLAB 代码:
demod4(1) = [];
我尝试过Python
demod4[0] = array([])
但它给出了错误:
only length-1 arrays can be converted to Python scalars
如果您使用
numpy
数组,则可以通过指定预期的矩阵大小来初始化为 0:
import numpy as np
d = np.zeros((2,3))
>>> d
[[ 0. 0. 0.]
[ 0. 0. 0.]]
这相当于 MATLAB 的:
d = zeros(2,3);
您还可以再次使用预期的维度/大小来初始化一个空数组
d = np.empty((2,3))
如果您不使用 numpy,则与 MATLAB 的
d = []
(即零大小矩阵)最接近的等效方法将使用空列表,然后
追加值(用于填充向量)
d = []
d.append(0)
d.append(1)
>>> d
[0, 1]
或追加列表(用于填充矩阵行或列):
d = []
d.append(range(0,2))
d.append(range(2,4))
>>> d
[[0, 1], [2, 3]]
另请参阅:
初始化一个numpy数组(SO)
您可以使用嵌套列表理解:
# size of matrix n x m
matrix = [ [ 0 for i in range(n) ] for j in range(m) ]
要初始化 M 行 N 列的矩阵,您可以使用以下模式:
M = 3
N = 2
matrix = [[0] * N for _ in range(M)]
初始化一个列表,填充它,然后转换为数组怎么样。
demod4 = []
或者,您可以在初始化时使用列表理解进行填充
demod4 = [[func(i, j) for j in range(M)] for i in range(N)]
或者,如果您提前知道数组的大小,则可以初始化一个全零的数组。
demod4 = [[0 for j in range(M)] for i in range(N)]
或
demod4 = [[0] * M for _ in range(N)]
或者尝试使用
numpy
。
import numpy as np
N, M = 100, 5000
np.zeros((N, M))
如果你想用 0 初始化矩阵,请使用下面的代码
# for m*n matrix
matrix = [[0] * m for i in range(n)]
M=[]
n=int(input())
m=int(input())
for j in range(n):
l=[]
for k in range(m):
l.append(0)
M.append(l)
print(M)
这是执行矩阵 [m,n] 的传统方法,但是,正如其他答案中提到的,Python 提供了许多很酷的方法。
rows = 3
columns = 4
matrix = [[0] * columns] * rows
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
for i in range(rows):
for j in range(columns):
print(matrix[i][j], end=' ')
print()
0 0 0 0
0 0 0 0
0 0 0 0
rows = 3
columns = 2
M = [[0]*columns]*rows
或者你也可以使用 '' 代替 0
print(M)
输出:
M = [[0, 0], [0, 0], [0, 0]]