#python #matlab #numpy
#python #matlab #numpy
Вопрос:
Я пользователь Matlab, пытающийся переключиться на Python.
Используя 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
Ответ №1:
Сначала вы должны установить numpy с помощью
$ 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)))
Еще быстрее, как предложил Divakar
I = np.arange(n)
matrix = np.column_stack((3*I, I**2))
Комментарии:
1. Или
I = np.arange(n)
и затемnp.column_stack((3*I, I**2))
.2. Спасибо за совет 🙂
3. Имейте в виду, что это не матрицы, несмотря на имя переменной. Это массивы. Массивы используются так же, как и матрицы, но работают по-разному несколькими способами, такими как поддержка менее двух измерений и использование поэлементных операций по умолчанию. Numpy предоставляет класс matrix, но вы не должны его использовать, потому что большинство других инструментов ожидают numpy-массива.
Ответ №2:
Это очень питоническая форма для создания списка, который вы можете легко поменять местами, например, для 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))]