Индексирование значений с использованием цикла for и numpy для Python 3 - PullRequest
0 голосов
/ 01 октября 2019

Я с нетерпением ожидаю перехода от Matlab к Python. У меня возникли некоторые трудности в понимании индексации массива с помощью numpy.

В качестве примера я собираюсь использовать цикл for, чтобы назначить внутренним элементам вектора строки определенное значение. Индексирование в numpy, кажется, уникально, когда дело доходит до индексации массивов столбцов ранга 1 по сравнению с массивами строк.


# Python:
import nump as np
from numpy import*
import scipy.linalg

N = 5
L = 1.0
dx = L / N
S = 10.0 ** -2.0
k = 500.0

aW = zeros((1, N))

for i in range(1, (N-1)):
    aE[0, i] = k * S / dx


% Matlab:
N=5;
L=1.0;
dx=L/N;
S=10^(-2.0);
k=500.0;

aW=zeros(1,N);

for i = 2:N-1
    aE(i)=k*S/dx;
end

Нужно ли указывать индекс строки 0 вместо простого указания:

'aE [i] = k * S / dx'

Похоже, что Matlab не заботится о размерах матрицы при назначении элементов на основе одного входа для индекса.

У меня нет проблем с указанием индекса строки. Это заставляет меня больше осознавать мои переменные размеры. Я просто хочу проверить, что это необходимо. Возможно я неправильно настраиваю вектор. Буду признателен за помощь.

1 Ответ

0 голосов
/ 01 октября 2019

Вам следует избегать повторения циклов использования for, вместо этого попытайтесь решить проблему с помощью трансляции.

Прочтите о вещании NumPy

https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

Вы можете сделать это, например.

>>> import numpy as np
>>> np.full((2,3), 10)
array([[10, 10, 10],
       [10, 10, 10]])

или

>>> a = np.ones((2,3))
>>> a
array([[1., 1., 1.],
       [1., 1., 1.]])
>>> a * 10
array([[10., 10., 10.],
       [10., 10., 10.]])

или


>>> b = np.zeros((2,3))
>>> b
array([[0., 0., 0.],
       [0., 0., 0.]])
>>> b+10
array([[10., 10., 10.],
       [10., 10., 10.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...