Python 使用for循环在numpy中填充二维矩阵

Python 使用for循环在numpy中填充二维矩阵,python,matlab,numpy,Python,Matlab,Numpy,我是一个试图切换到Python的Matlab用户 使用Numpy,如何在for循环中填充矩阵 例如,矩阵有2列,每次迭代For循环都会添加一行新数据 在Matlab中,这将是: n = 100; matrix = nan(n,2); % Pre-allocate matrix for i = 1:n matrix(i,:) = [3*i, i^2]; end 首先,您必须使用 $ pip install numpy 那么下面的方法应该有效 import numpy as np

我是一个试图切换到Python的Matlab用户

使用Numpy,如何在
for
循环中填充矩阵

例如,矩阵有2列,每次迭代
For
循环都会添加一行新数据

在Matlab中,这将是:

n = 100;
matrix = nan(n,2); % Pre-allocate matrix
for i = 1:n
    matrix(i,:) = [3*i, i^2];
end

首先,您必须使用

$ pip install numpy
那么下面的方法应该有效

import numpy as np    
n = 100
matrix = np.zeros((n,2)) # Pre-allocate matrix
for i in range(1,n):
    matrix[i,:] = [3*i, i**2]
更快的选择:

col1 = np.arange(3,3*n,3)
col2 = np.arange(1,n)
matrix = np.hstack((col1.reshape(n-1,1), col2.reshape(n-1,1)))
甚至更快,正如迪瓦卡所说

I = np.arange(n)
matrix = np.column_stack((3*I, I**2))

这是一种非常适合生成列表的python形式,您可以轻松地将其交换为np.array、set、generator等

n = 10

[[i*3, i**2] for i, i in zip(range(0,n), range(0,n))]
如果您想添加另一列,这没有问题。简单地

[[i*3, i**2, i**(0.5)] for i, i in zip(range(0,n), range(0,n))]

或者
I=np.arange(n)
,然后
np.column\u stack((3*I,I**2))
。感谢提示:-)请记住,这些不是矩阵,不管变量名如何。它们是数组。数组的使用方式与矩阵相同,但工作方式不同,例如支持少于两个维度,默认情况下使用逐元素操作。Numpy提供了一个矩阵类,但您不应该使用它,因为大多数其他工具都需要Numpy数组。