От циклов for к реализации numpy dot

1
N=100 

reliab=zeros((N,N))


for i in range(N):    

    for j in range(N):
        if random() < 0.6:
            reliab[i,j] = 1
        else:
            reliab[i,j] = 0

Как и в моем коде, это заполнение матрицы вызывает огромное количество раз, это для циклов должно быть изменено с помощью точечного продукта... но я не знаю, как это сделать... Кто-нибудь хочет помочь мне?

Теги:
numpy
loops

2 ответа

4
Лучший ответ

Я не уверен, что полностью понимаю вашу проблему, но следующая строка должна делать то же самое, что и ваш код:

reliab = numpy.int32(numpy.random.rand(N,N) < 0.6)
1
>>> import numpy as np
>>> reliab = np.random.random((N,N))
>>> reliab = reliab < 0.6
>>> reliab.dtype = np.int8
>>> reliab
array([[0, 0, 0, ..., 1, 0, 1],
       [0, 1, 1, ..., 0, 1, 0],
       [1, 1, 0, ..., 1, 0, 1],
       ..., 
       [0, 1, 0, ..., 1, 1, 1],
       [0, 0, 1, ..., 1, 1, 1],
       [0, 1, 0, ..., 0, 0, 0]], dtype=int8)
  • 0
    Приятно. Вероятно, вам следует масштабировать надежность, прежде чем менять ее тип. ОП хочет присвоить 1 с вероятностью 0,6.
  • 0
    @ Amaç Herdağdelen: np.random.random находится на интервале [0,1) , поэтому масштабирование не требуется. (Или, суммируя мой массив, я получаю 6009 из 10000, что почти на 60%). (Да, вы опередили меня с ответом, и они похожи, но я решил, что все равно напишу ответ).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню