3

numpyを使用したランダムウォークシミュレーションの非常に単純な例に取り組んでいます。私の教授は、可能な限りforループの代わりにnumpyのブロードキャスト機能を使用することを主張しており、辞書の定義をブロードキャストできるかどうかを知りたいと思います。

たとえば、配列[EWNS]があります。辞書を使用してその配列を実行すると、[[1、0] [-1、0] [0、1] [0、-1]]になります。

import numpy as np
import matplotlib.pyplot as plt

def random_path(origin, nsteps, choices, choice_probs, choice_map):
    directions = np.random.choice(choices, size=(15,), p=choice_probs)
    print directions

def main():
    directions = ['N', 'S', 'E', 'W']
    dir_probabilities = [.2, .3, .45, .05]
    dir_map = {'N': [0, 1], 'S': [0, -1], 'E': [1, 0], 'W': [-1, 0]}
    origin = [0, 0]

    np.random.seed(12345)
    path = random_path(origin, 15, directions, dir_probabilities, dir_map)

main()
4

1 に答える 1

2

実際の方向ラベルを無視して、方向を(4,2)整形されたnumpy配列として保存しないのはなぜですか?次に、その配列に直接インデックスを付けます。

def random_path(origin, nsteps, choices, choice_probs, choice_map):
    directions = np.random.choice(choices, size=(15,), p=choice_probs)
    return directions

dir_map = np.array([[0,1], [0,-1], [1,0], [-1,0]])
# Everything else is the same as defined by OP

path_directions = random_path(origin, 15, np.arange(4), dir_probabilities, dir_map)
path = dir_map[path_directions]

pathこれで、(15,2)からの一連の移動を含む、形作られたnumpy配列になりますdir_map

于 2013-03-25T02:49:05.670 に答える