gpt4 book ai didi

python - 如何安全地将整数矩阵预分配为 numpy 中的索引矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:57 24 4
gpt4 key购买 nike

我想预分配一个整数矩阵来存储迭代中生成的索引。在 MATLAB 中,这可以通过 for 循环之前的 IXS = zeros(r,c) 获得,其中 rc 是行数和列数。因此,后续 for 循环中的所有索引都可以分配给 IXS 以避免动态分配。如果我不小心在我的代码中选择了 0,例如,错误地选择这些索引以从矩阵中选择元素,就会出现错误。

但在 numpy 中,0 或其他负值也可以用作索引。例如,如果我在 numpy 中将 IXS 预分配为 IXS=np.zeros([r,c],dtype=int)。在for循环中,可以通过X(:,IXS(IXS~=0))获取之前分配给IXS的索引指定的子矩阵> 在 MATLAB 中,但如果我在 numpy 中以相同的方式执行选择,第一行/列可能会丢失。

此外,在大型矩阵运算的大型程序中,预分配对于加快计算速度很重要,并且很容易定位错误索引引起的错误,因为在MATLAB中可能会选择0。在 numpy 中,如果我通过 X[:,IXS[:n]] 选择一个错误的 n 数组,则不会发生错误。我必须花很多时间来检查错误在哪里。更糟糕的是,如果最终结果不是那么奇怪,我可能会忽略这个错误。这总是发生在我的程序中。因此我不得不一次又一次地调试我的代码。

我想知道有没有一种安全的方法可以在 numpy 中预分配这样的索引矩阵?

最佳答案

如何用明显太大的值填充索引数组:

In [156]: x=np.array([1,2,3,4,5])
In [157]: idx=np.full(6,999,dtype=int)
In [158]: idx[:3]=[1,0,4]
In [159]: idx
Out[159]: array([ 1, 0, 4, 999, 999, 999])
In [160]: x[idx[:3]]
Out[160]: array([2, 1, 5])
In [161]: x[idx[:4]]
...
IndexError: index 999 is out of bounds for axis 1 with size 5

关于python - 如何安全地将整数矩阵预分配为 numpy 中的索引矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41534489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com