相关疑难解决方法(0)

如何从numpy多维数组中获取k个最大值的索引

我经历了几个问题,StackOverflow但找不到相关的答案.我想从a中获取k个最大值的索引numpy ndarray.此链接讨论相同但对于1D阵列.np.argsort对于2D数组导致逐行排序元素.即

Note: array elements are not unique.
Run Code Online (Sandbox Code Playgroud)

输入:

import numpy as np
n = np.arange(9).reshape(3,3)
>>> n
array([[0, 1, 2],
   [3, 4, 5],
   [6, 7, 8]])
s = n.argsort()
>>> s
array([[0, 1, 2],
   [0, 1, 2],
   [0, 1, 2]], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

也,

import numpy as np
n = np.arange(9).reshape(3,3)
s = n.argsort(axis=None)
>>>s
array([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

但我在这里丢失了数组结构,无法兑换元素的原始索引.

任何帮助都是值得赞赏的.

python numpy

8
推荐指数
1
解决办法
1229
查看次数

Python NUMPY HUGE Matrices乘法

我需要将两个大矩阵相乘并对其列进行排序.

 import numpy
 a= numpy.random.rand(1000000, 100)
 b= numpy.random.rand(300000,100)
 c= numpy.dot(b,a.T)
 sorted = [argsort(j)[:10] for j in c.T]
Run Code Online (Sandbox Code Playgroud)

这个过程需要大量的时间和内存.有没有办法加快这个过程?如果不是,我如何计算执行此操作所需的RAM?我目前有一个带有4GB RAM且没有交换的EC2盒子.

我想知道这个操作是否可以序列化,我不必将所有内容存储在内存中.

python performance numpy matrix-multiplication

6
推荐指数
2
解决办法
8002
查看次数

有没有办法获取 numpy 数组(Python)每行的前 k 个值?

给定一个如下形式的 numpy 数组:

x = [[4.,3.,2.,1.,8.],[1.2,3.1,0.,9.2,5.5],[0.2,7.0,4.4,0.2,1.3]]
Run Code Online (Sandbox Code Playgroud)

有没有办法在 python 中保留每行中的前 3 个值并将其他值设置为零(无需显式循环)。上面示例的结果将是

x = [[4.,3.,0.,0.,8.],[0.,3.1,0.,9.2,5.5],[0.0,7.0,4.4,0.0,1.3]]
Run Code Online (Sandbox Code Playgroud)

一个例子的代码

import numpy as np
arr = np.array([1.2,3.1,0.,9.2,5.5,3.2])
indexes=arr.argsort()[-3:][::-1]
a = list(range(6))
A=set(indexes); B=set(a)
zero_ind=(B.difference(A)) 
arr[list(zero_ind)]=0
Run Code Online (Sandbox Code Playgroud)

输出:

array([0. , 0. , 0. , 9.2, 5.5, 3.2])
Run Code Online (Sandbox Code Playgroud)

上面是我的一维 numpy 数组的示例代码(有很多行)。循环遍历 numpy 数组的每一行并重复执行相同的计算将非常昂贵。有没有更简单的方法?

python loops numpy python-2.7 python-3.x

6
推荐指数
1
解决办法
3716
查看次数

m来自上三角矩阵的最小值,其索引为元组列表

我有一个np.ndarray如下:

[[ inf   1.   3.   2.   1.]
 [ inf  inf   2.   3.   2.]
 [ inf  inf  inf   5.   4.]
 [ inf  inf  inf  inf   1.]
 [ inf  inf  inf  inf  inf]]
Run Code Online (Sandbox Code Playgroud)

有没有办法获得该nd数组中m个最小项的索引和值?所以,如果我想要4个最小的那个

[(0,1,1),(0,4,1),(3,4,1),(0,3,2)] 
Run Code Online (Sandbox Code Playgroud)

其中(row,col,val)是上面的符号.

如果有多个值,则只需随机选择其中一个值.例如,有3个,然后下一个最小值是2,但(0,3,2),(1,2,2),(1,4,2)都是可能的选择.

本质上,我可以有效地从上三角矩阵中提取该格式的k个最小值(矩阵比上面的例子大得多).我尝试使用方形,最小的方法展平它,但是我很难将索引和值对齐.谢谢!

python arrays numpy min pandas

5
推荐指数
1
解决办法
259
查看次数

在迭代部分更新的数组中重复查找 K 个最大值的索引的最快方法

a在包含元素的复值数组中nsel = ~750000,我重复(>~10^6迭代)更新nchange < ~1000元素。每次迭代之后,在绝对平方实值数组中,我需要找到最大值b的索引(可以假设很小,当然,实际上很可能)。索引不需要排序。KKK <= ~50K <= ~10K

\n

a更新的值及其索引在每次迭代中都会发生变化,并且它们取决于对应于 的最大值及其索引的(先验)未知元素b。尽管如此,让我们假设它们本质上是随机的,除了一个特定元素(通常是最大值(一个或多个))始终包含在更新值中。重要提示:更新后,新的最大值可能位于未更新的元素中。

\n

下面是一个最小的例子。为简单起见,它仅演示了 10^6(循环)迭代之一。我们可以使用(for ) 或(任意, 一般情况,请参阅/sf/answers/1661400681/K ) 找到最大值的索引。然而,由于( ) 的尺寸很大,遍历整个数组来查找最大值的索引非常慢。与大量迭代相结合,这形成了我正在使用的较大代码(非线性反卷积算法 CLEAN)的瓶颈,该代码嵌入了该步骤。b.argmax()K = 1b.argpartition()Kbnsel

\n

我已经问过如何最有效地找到最大值(大小写K = 1)的问题,请参阅Python 最有效的方法在部分更改的数组中查找最大值的索引可接受的解决方案仅依赖于b通过将数据分割成块并(重新)计算仅更新某些元素的块的最大值来进行部分访问。> 7x从而实现了加速。

\n

根据作者@J\xc3\xa9r\xc3\xb4me Richard 的说法(感谢您的帮助!),不幸的是,这个解决方案不能轻易推广到K > 1. 正如他所建议的,一个可能的替代方案可能是二叉搜索树。现在我的

\n

问题:这样的二叉树在实践中是如何实现的,以及我们如何最有效地(如果可能的话,很容易地)找到最大值的索引?您是否有其他解决方案来以最快的方式重复查找K …

python arrays performance numpy max

5
推荐指数
1
解决办法
380
查看次数

矩阵中的前n行?

我试图弄清楚这样做的最好方法,理想情况是在Octave中,但我会把NumPy放在紧要关头.

假设我有一个axb矩阵M.如果我想要任何给定列中最大值的行索引,[x, xi] = max(M)将把这些索引作为行向量返回给我.

例如,如果M是:

1  3  5 
2  9  1
7  2  4
Run Code Online (Sandbox Code Playgroud)

上述将返回行向量[3 2 1]作为xi; 每行索引的向量,包含该列的最大值.这很好.我想要这个行矢量.

但是,如果我想要前n个这样的行向量怎么办?

[编辑解释这个更好]

对于上面的例子,第一个这样的矢量将是上面的[3, 2, 1](每个给定列具有最高值的行的索引).第二个这样的矢量将是[2 1 3](每列的第二高值的行的索引).

我可以迭代地做,但我的实际矩阵有几千行,所以这在计算上非常昂贵.我找不到任何明显的矩阵效用函数来帮助我实现这一目标.有什么建议?

matlab numpy octave

4
推荐指数
1
解决办法
5234
查看次数

搜索k个最近的点

我有一大堆功能,如下所示:

id1 28273 20866 29961 27190 31790 19714 8643 14482 5384 ....  upto 1000
id2 12343 45634 29961 27130 33790 14714 7633 15483 4484 ....  
id3 ..... ..... ..... ..... ..... ..... .... ..... .... .... .   .   .
...
id200000 .... .... ... ..  .  .  .  .
Run Code Online (Sandbox Code Playgroud)

我想计算每个id欧氏距离并对它们进行排序以找到最近的5个点.因为我的数据集非常大.什么是最好的方法.

python knn

3
推荐指数
2
解决办法
6563
查看次数

在python中获取大小为N的未排序列表中获取k个最小数字的最快方法?

使用python在大小为N的未排序列表中获取k个最小数字的最快方法是什么?
对大数字列表进行排序,然后获得k个最小数字,
或者通过在列表中找到k次中的最小值来获得k个最小数字,确保在下一个搜索之前从搜索中删除找到的最小值?

python algorithm time-complexity

3
推荐指数
2
解决办法
4233
查看次数