python - 您可以通过 numpy 数组广播字典定义吗?

标签 python numpy

我正在研究一个使用 numpy 进行随机游走模拟的非常简单的示例。我的教授坚持认为我们尽可能多地使用 numpy 的广播功能而不是 for 循环,我想知道是否可以广播字典定义。

例如我有数组 [E W N S]。使用字典遍历该数组将导致 [[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,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 的移动序列。

关于python - 您可以通过 numpy 数组广播字典定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606771/

相关文章:

python - 如何将数据集拆分为训练集和验证集以保持类之间的比率?

python - 每个元素与数组的每个其他元素的点积

python - 在 Python 中测试生成器

python - 实现更准确的图像变形

python - 如何从 numpy 数组中选择两个边界之间的点?

python - bool 索引 n 维 Numpy 数组

python - 将 2 列合并为 1 列

python - 如何绘制网络图的补集?

python - emacs:python 设置缩进选项卡(pylint、autopep8、flycheck 等问题)

python - 生成所有 n 选择 k 个二元向量 python