我试图使一个模拟器的传入消息输出端口。 给出了输入端口数(N)和输出端口数(M)以及N*M(mat)的平坦概率矩阵。我还得到了作为一个数组的传入消息的数量(以\u freq为单位)。 我想为了将每条消息从一个输入端口定向到一个输出端口,我应该使用一个numpy.random.choice选项,但没能成功。你知道吗
我尝试的是:
for k in range (N):
enqueue = np.random.choice(M, in_freq[k], p=[(mat[k*N:k*N+M-1])])
当enqueue是消息目的地的数组时。你知道吗
但是遇到了这样的信息:
ValueError: object too deep for desired array
问题
正如hpaulj在评论中指出的那样,您看到的} docs )。你知道吗
ValueError
是由于您的p
参数被包装在列表括号[]
中。这个额外的list
使np.random.choice
将p
解释为形状(1, x)
的二维数组,而不是一维数组。因为np.random.choice
的第一个参数是一个整数,所以函数要求p
是1D,当它看到不是1D时抛出一个错误(有关完整的详细信息,请参见^{只需删除
p
周围的括号即可修复ValueError
:但是,现在您的代码将引发一个新的不同的
ValueError
:这种
ValueError
是由于生成展平NxM矩阵的行切片的方式mat
不正确造成的。你知道吗解决方案
从您问题中的描述来看,您的意图似乎是通过切片1D
mat
来循环原始2Dmat
的行。下面是如何修复代码中的切片,以便迭代for
循环中的mat
行:测试
为了证明现在正在生成正确的切片,我添加了一个print语句,它在
for
循环的每个迭代中输出切片索引。下面是它的输出:这表明遍历
mat
行所需的片现在确实是按预期生成的。你知道吗关于将二维索引转换为一维等效索引的注释
给定一个具有
N
行和M
列的数组,将2Dx,y
索引转换为其平坦的1D等价i
的一般公式为:您可以在这个old thread中找到更深入的讨论。你知道吗
相关问题 更多 >
编程相关推荐