相关疑难解决方法(0)

numpy中flatten和ravel函数有什么区别?

import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1   2   3   4   5   6   7   8   9]
print(y.ravel())
[1   2   3   4   5   6   7   8   9]
Run Code Online (Sandbox Code Playgroud)

两个函数都返回相同的列表.那么两个不同功能执行相同工作的需求是什么.

python numpy flatten multidimensional-array numpy-ndarray

256
推荐指数
3
解决办法
7万
查看次数

获取python中列表的前n个值的索引

我有一个清单说a = [5,3,1,4,10].我需要获得列表的前两个值的索引,即5和10.是否有一个python为这种情况提供的单行程?

python

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

一种快速查找numpy数组中最大N个元素的方法

我知道我可以像下面这样做:

import numpy as np
N=10
a=np.arange(1,100,1)
np.argsort()[-N:]
Run Code Online (Sandbox Code Playgroud)

然而,由于它做了一个完整的排序,它非常慢.

我想知道numpy是否提供了一些快速的方法.

python sorting numpy

43
推荐指数
5
解决办法
4万
查看次数

找到numpy数组的k个最小值的索引

为了找到最小值的索引,我可以使用argmin:

import numpy as np
A = np.array([1, 7, 9, 2, 0.1, 17, 17, 1.5])
print A.argmin()     # 4 because A[4] = 0.1
Run Code Online (Sandbox Code Playgroud)

但是如何找到k-最小值的指数?

我正在寻找类似的东西:

print A.argmin(numberofvalues=3)   
# [4, 0, 7]  because A[4] <= A[0] <= A[7] <= all other A[i]
Run Code Online (Sandbox Code Playgroud)

注意:在我的用例A中有大约10 000到100 000个值,我只对k = 10个最小值的索引感兴趣.k永远不会超过10.

python numpy

40
推荐指数
3
解决办法
4万
查看次数

有效地查找Python数组/列表中N个最大元素的索引

如果这是一个重复的问题,我很抱歉,我查找了这些信息,但仍然无法找到它.

是否可以通过非常有效地使用递减顺序的N个最大元素的索引来排列numpy数组(或python列表)?

例如,数组:

a = array([4, 1, 0, 8, 5, 2])
Run Code Online (Sandbox Code Playgroud)

降序中最大元素的索引将给出(考虑N = 6,包括所有元素):

8 - > 3

5 - > 4

4 - > 0

2 - > 5

1 - > 1

0 - > 2

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

我知道如何使用一些有点愚蠢的方法来制作它(比如对数组进行排序并搜索其索引中的每个N个数字),但我想知道是否有任何有效的库,如瓶颈或heapq,或者可能是pythonic方法这非常快.我必须在几个阵列中应用它,每个阵列有300k元素,这就是性能问题的原因.

提前致谢!

UPDATE

我读了答案并决定使用300k的随机整数来计算它们,结果如下:

解决方案1: sorted(range(len(a)), key=lambda i:a[i]) 时间: 230毫秒

解决方案2: heapq.nlargest(len(a), zip(a, itertools.count())) 时间: 396毫秒

解决方案3: heapq.nlargest(len(a), enumerate(a), key=operator.itemgetter(1)) 时间: 864毫秒

解决方案4: def f(a,N): return np.argsort(a)[::-1][:N] (N = len(a)) 时间:104毫秒

非常感谢快速和非常好的答案!

python performance numpy

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

我需要一个numpy数组中的N个最小(索引)值

嗨,我有一个X值的数组,我想找到十个最小值的索引.在这个链接中,他们有效地计算了最大值,如何在numpy数组中获得N个最大值的索引? 但我不能评论链接,所以我不得不重新发布这个问题.

我不确定我需要改变哪些指数才能达到最小值而不是最大值.这是他们的代码

In [1]: import numpy as np

In [2]: arr = np.array([1, 3, 2, 4, 5])

In [3]: arr.argsort()[-3:][::-1]
Out[3]: array([4, 3, 1]) 
Run Code Online (Sandbox Code Playgroud)

python arrays numpy minimum

19
推荐指数
3
解决办法
4万
查看次数

如何在列表或np.array中查找n个最大元素的索引

是否有内置函数或非常简单的方法来查找列表或numpy数组中n个最大元素的索引?

K = [1,2,2,4,5,5,6,10]
Run Code Online (Sandbox Code Playgroud)

找到最大的5个元素的索引?

我不止一次地计算重复项,输出应该是那些最大数字的索引列表

python arrays list

13
推荐指数
1
解决办法
2万
查看次数

如何使用sklearn的SGDClassifier获得前3或前N个预测

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from sklearn import linear_model
arr=['dogs cats lions','apple pineapple orange','water fire earth air', 'sodium potassium calcium']
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(arr)
feature_names = vectorizer.get_feature_names()
Y = ['animals', 'fruits', 'elements','chemicals']
T=["eating apple roasted in fire and enjoying fresh air"]
test = vectorizer.transform(T)
clf = linear_model.SGDClassifier(loss='log')
clf.fit(X,Y)
x=clf.predict(test)
#prints: elements
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,clf.predict()仅为列表X中的样本打印1个最佳预测.我对列表X中特定样本的前3个预测感兴趣,我知道函数/ 返回列表Y中每个特征的所有概率的列表,但它必须排序然后与列表Y中的特征相关联才能获得的顶部3的结果.有没有直接有效的方法?predict_probapredict_log_proba

python scikit-learn multilabel-classification

11
推荐指数
3
解决办法
8244
查看次数

使用Python和NumPy从矩阵中获取最小/最大n值和索引的有效方法

在给定NumPy矩阵(2D数组)的情况下,返回数组中的最小值/最大值n(及其索引)的有效方法是什么?

目前我有:

def n_max(arr, n):
    res = [(0,(0,0))]*n
    for y in xrange(len(arr)):
        for x in xrange(len(arr[y])):
            val = float(arr[y,x])
            el = (val,(y,x))
            i = bisect.bisect(res, el)
            if i > 0:
                res.insert(i, el)
                del res[0]
    return res
Run Code Online (Sandbox Code Playgroud)

这比pyopencv生成我想要运行它的数组的图像模板匹配算法要长三倍,我认为这很愚蠢.

python optimization performance numpy

10
推荐指数
2
解决办法
1万
查看次数

numpy分区如何工作

我想弄清楚np.partition函数是如何工作的.例如,考虑一下

arr = np.array([ 5, 4, 1, 0, -1, -3, -4, 0])

如果我打电话np.partition(arr, kth=2),我得到了

np.array([-4, -3, -1, 0, 1, 4, 5, 0])

我希望在分区数组之后将分裂为少于一个,一个和更大一个元素的元素.但是第二个零位于最后一个数组位置,这在分区后不是正确的位置.

python arrays sorting numpy

8
推荐指数
2
解决办法
2876
查看次数