Как сравнить элементы массива со скаляром с помощью цикла? - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу смоделировать частоту ошибок по битам (BER) импульсной амплитудной модуляции (PAM) в Python, как это делается в MATLAB.

Я попытался запустить цикл, используя ii в качестве индексной переменной, но получаю сообщение об ошибке: «Значение истинности массива с более чем одним элементом неоднозначно». Я пытался погуглить, но не мог понять ответы. Я программировал в MATLAB и теперь хочу изучать Python. Я полный новичок в Python.

N = int(1e6); # number of bits
for ii in range(N):
    if data_bits[ii]==1:
        y = sm

Я получаю сообщение об ошибке со строкой data_bits [ii] == 1. Этого не происходит в MATLAB.

ПРИМЕЧАНИЕ: я показываю проблемную часть. Этот код может не иметь полного смысла, но только подчеркивает, что у меня возникают проблемы с пониманием.

1 Ответ

1 голос
/ 30 апреля 2019

Вы бы не использовали цикл for для начала.Вы можете просто «выбрать» правильные значения и установить для них другое значение:

import numpy as np

arr = np.random.rand(10,1)
print(arr)

# select all values > 0.5 and set to 5
arr[(arr>0.5)] = 5

print(arr)

Вывод:

# random values to begin with
[[0.00859812]
 [0.03146223]
 [0.55717924]
 [0.14131905]
 [0.52429833]
 [0.45643492]
 [0.4409319 ]
 [0.96135169]
 [0.41511691]
 [0.33970605]]

# after selecting and setting to 5
[[0.00859812]
 [0.03146223]
 [5.        ]
 [0.14131905]
 [5.        ]
 [0.45643492]
 [0.4409319 ]
 [5.        ]
 [0.41511691]
 [0.33970605]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...