相关疑难解决方法(0)

是否有NumPy函数返回数组中某些内容的第一个索引?

我知道Python列表有一种方法可以返回第一个索引:

>>> l = [1, 2, 3]
>>> l.index(2)
1
Run Code Online (Sandbox Code Playgroud)

NumPy阵列有类似的东西吗?

python arrays numpy

428
推荐指数
10
解决办法
57万
查看次数

在numpy数组中查找多个值的行索引

我有一个数组X:

X = np.array([[4,  2],
              [9,  3],
              [8,  5],
              [3,  3],
              [5,  6]])
Run Code Online (Sandbox Code Playgroud)

我希望在这个数组中找到几个值的行的索引:

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])
Run Code Online (Sandbox Code Playgroud)

对于这个例子,我想要一个结果,如:

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

我有一个代码这样做,但我认为它过于复杂:

X = np.array([[4,  2],
              [9,  3],
              [8,  5],
              [3,  3],
              [5,  6]])

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])

result = []

for s in searched_values:
    idx = np.argwhere([np.all((X-s)==0, axis=1)])[0][1]
    result.append(idx)

print(result)
Run Code Online (Sandbox Code Playgroud)

我找到了类似问题的答案,但它仅适用于1d阵列.

有没有办法以更简单的方式做我想做的事情?

python arrays numpy

14
推荐指数
3
解决办法
6702
查看次数

是否可以为sklearn SVM明确设置可能的类的列表?

我有一个使用sklearn的SVC类的程序。确实,我正在使用使用SVC类的OneVsRestClassifier类。我的问题是predict_proba()方法有时返回的向量太短。这是因为classes_属性缺少一个类,这种情况发生在训练过程中不存在标签时。

考虑下面的示例(下面显示的代码)。假设所有可能的类分别是1、2、3和4。现在假设训练数据恰好不包含任何用3类标记的数据。这很好,除非当我调用predict_proba()时我想要一个长度为4的向量。 ,我得到一个长度为3的向量。也就是说,predict_proba()返回[p(1)p(2)p(4)],但是我想要[p(1)p(2)p(3)p(4) )],其中p(3)= 0。

我想clf.classes_是由培训期间看到的标签隐式定义的,在这种情况下是不完整的。有什么方法可以显式设置可能的类标签?我知道一个简单的解决方法是仅采用predict_proba()输出并手动创建所需的数组。但是,这很不方便,可能会使我的程序变慢。

# Python 2.7.6

from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
import numpy as np

X_train = [[1], [2], [4]] * 10
y = [1, 2, 4] * 10
X_test = [[1]]

clf = OneVsRestClassifier(SVC(probability=True, kernel="linear"))
clf.fit(X_train, y)

# calling predict_proba() gives: [p(1) p(2) p(4)]
# I want: [p(1) p(2) p(3) p(4)], where p(3) = 0
print clf.predict_proba(X_test)
Run Code Online (Sandbox Code Playgroud)

我想到的变通方法会创建一个新的概率列表,并通过多个append()调用一次将其构建为一个元素(请参见下面的代码)。与让predict_proba()自动返回我想要的东西相比,这似乎要慢一些。我还不知道它是否会大大减慢我的程序的速度,因为我还没有尝试过。无论如何,我想知道是否有更好的方法。

def workAround(probs, classes_, all_classes):
    """
    probs: list of probabilities, output of predict_proba (but 1D)
    classes_: …
Run Code Online (Sandbox Code Playgroud)

python classification svm scikit-learn

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

如何在 O(1) 中获得 numpy 中的反向映射?

我有一个 numpy 数组,其元素是唯一的,例如:

b = np.array([5, 4, 6, 8, 1, 2])

(Edit2:b可以有大数和浮点数。上面的例子是为了简单起见)

我得到的数字是 b 中的元素。

我想找到自己的指数b,这意味着我要反向映射,从价值指数,中b

我可以

for number in input:
    ind = np.where(number==b)
Run Code Online (Sandbox Code Playgroud)

每次调用where.

我还可以创建一个字典,

d = {}
for i, element in enumerate(list(b)):
    d[element] = i
Run Code Online (Sandbox Code Playgroud)

我可以在“预处理”时创建这个字典,但我仍然会留下一个看起来很奇怪的字典,在一个主要是 numpy 的代码中,这似乎(对我来说)不是 numpy 的使用方式。

如何在 numpy 中进行这种反向映射?

使用情况(需要 O(1) 时间和内存):

print("index of 8 is: ", foo(b, 8))
Run Code Online (Sandbox Code Playgroud)

这里解释的那样使用 in1d并不能解决我的问题。使用他们的例子:

b = np.array([1, 2, 3, 10, 4])
Run Code Online (Sandbox Code Playgroud)

我希望能够10在运行时在 …

python arrays indexing numpy

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

如何在父字符串列表中查找与子字符串列表对应的索引

我正在编写一个从文本文件中读取数据的代码.我使用numpy loadtxt加载数据,它看起来像这样:

import numpy as np

Shop_Products  = np.array(['Tomatos', 'Bread' , 'Tuna', 'Milk', 'Cheese'])
Shop_Inventory = np.array([12, 6, 10, 7, 8])
Run Code Online (Sandbox Code Playgroud)

我想检查一下我的产品:

Shop_Query     = np.array(['Cheese', 'Bread']
Run Code Online (Sandbox Code Playgroud)

现在我想在Shop_Products数组中找到这些"items"indeces,而不进行for循环和检查.

我想知道是否可以使用任何numpy方法:我想使用intercept1d找到常见项目然后使用searchsorted.但是,我无法对"产品"列表进行排序,因为我不想放弃原始排序(例如,我会使用索引直接查找每个产品的库存).

关于"pythonish"解决方案的任何建议?

python arrays string indexing numpy

3
推荐指数
1
解决办法
341
查看次数

标签 统计

python ×5

arrays ×4

numpy ×4

indexing ×2

classification ×1

scikit-learn ×1

string ×1

svm ×1