相关疑难解决方法(0)

如何计算列表项的出现次数?

给定一个项目,如何在Python的列表中计算它的出现次数?

python list count

1417
推荐指数
20
解决办法
151万
查看次数

在Python中以numpy/scipy计算数组中的唯一元素的有效方法

我有一个scipy数组,例如

a = array([[0, 0, 1], [1, 1, 1], [1, 1, 1], [1, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

我想计算数组中每个唯一元素的出现次数.例如,对于上面的数组a,我想知道[1次,0次,1次]出现1次,[1,1,1]出现1次,[1,0,1]出现1次.

我想到的一种方法是:

from collections import defaultdict
d = defaultdict(int)

for elt in a:
  d[elt] += 1
Run Code Online (Sandbox Code Playgroud)

有更好/更有效的方式吗?

谢谢.

python numpy scipy

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

为什么Collections.counter这么慢?

我正在尝试解决Rosalind在给定序列中计算核苷酸的基本问题,并将结果返回到列表中.对于那些不熟悉生物信息学的人来说,它只计算一个字符串中4个不同字符('A','C','G','T')的出现次数.

我希望collections.Counter这是最快的方法(首先是因为他们声称是高性能,第二是因为我看到很多人使用它来解决这个特定的问题).

但令我惊讶的是这种方法最慢!

我比较了三种不同的方法,使用timeit和运行两种类型的实验:

  • 长时间运行几次
  • 多次运行短序列.

这是我的代码:

import timeit
from collections import Counter

# Method1: using count
def method1(seq):
    return [seq.count('A'), seq.count('C'), seq.count('G'), seq.count('T')]

# method 2: using a loop
def method2(seq):
    r = [0, 0, 0, 0]
    for i in seq:
        if i == 'A':
            r[0] += 1
        elif i == 'C':
            r[1] += 1
        elif i == 'G':
            r[2] += 1
        else:
            r[3] += 1
    return r

# method 3: using Collections.counter …
Run Code Online (Sandbox Code Playgroud)

python collections performance counter bioinformatics

14
推荐指数
2
解决办法
2631
查看次数

matlab中的matlab ismember函数

虽然类似的问题已经提出了几次,但我仍然无法在Python中创建类似于matlab ismember函数的函数.特别是,我想在循环中使用这个函数,并在每次迭代中将整个矩阵与另一个矩阵的元素进行比较.在发生相同值的情况下,我想打印1,在任何其他情况下打印0.

假设我有以下矩阵

d = np.reshape(np.array([ 2.25,  1.25,  1.5 ,  1.  ,  0.  ,  1.25,  1.75,  0.  ,  1.5 ,  0.  ]),(1,10))
d_unique = np.unique(d)
Run Code Online (Sandbox Code Playgroud)

然后我有

d_unique
array([ 0.  ,  1.  ,  1.25,  1.5 ,  1.75,  2.25])
Run Code Online (Sandbox Code Playgroud)

现在我想迭代

J = np.zeros(np.size(d_unique))
for i in xrange(len(d_unique)):
        J[i] = np.sum(ismember(d,d_unique[i]))
Run Code Online (Sandbox Code Playgroud)

以便作为输出:

J = [3,1,2,2,1,1]
Run Code Online (Sandbox Code Playgroud)

有人有任何想法吗?提前谢谢了.

python numpy

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

NumPy数组中每行的唯一元素数

例如,对于

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

我想得到

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

有没有办法在没有循环或使用的情况下执行此操作np.vectorize

编辑:实际数据包含1000行,每行100个元素,每个元素的范围从1到365.最终目标是确定具有重复项的行的百分比.这是一个家庭作业问题,我已经解决了(使用for循环),但我只是想知道是否有更好的方法来做numpy.

python numpy

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

在非数字数据上滚动多数

给定一个数据帧:

df = pd.DataFrame({'a' : [1,1,1,1,1,2,1,2,2,2,2]})
Run Code Online (Sandbox Code Playgroud)

我想用'a'周围的大多数值替换'a'列中的每个值.对于数值数据,我可以这样做:

def majority(window):
    freqs = scipy.stats.itemfreq(window)
    max_votes = freqs[:,1].argmax()
    return freqs[max_votes,0]

df['a'] = pd.rolling_apply(df['a'], 3, majority)
Run Code Online (Sandbox Code Playgroud)

我得到:

In [43]: df
Out[43]: 
     a
0  NaN
1  NaN
2    1
3    1
4    1
5    1
6    1
7    2
8    2
9    2
10   2
Run Code Online (Sandbox Code Playgroud)

我将不得不处理NaNs,但除此之外,这或多或少是我想要的......除了,我想用非数字列做同样的事情,但是Pandas似乎不支持这个:

In [47]: df['b'] = list('aaaababbbba')
In [49]: df['b'] = pd.rolling_apply(df['b'], 3, majority)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-49-507f45aab92c> in <module>()
----> 1 df['b'] = pd.rolling_apply(df['b'], …
Run Code Online (Sandbox Code Playgroud)

pandas categorical-data

0
推荐指数
1
解决办法
960
查看次数

如何从两列计算数据帧

我有数据框,想计算名称在两列中出现的次数

data=pd.DataFrame({'TEAM 1':['Mark','Peter','Andy','Tony'],'Team 2':
                  ['Andy','Tony','Jhon','Peter']})
Run Code Online (Sandbox Code Playgroud)

所以名字 Andy 会算作 2,而 Jhon 是 1
预期输出

Mark 1
Andy 2
Tony 2
Jhon 1
Peter 2
Run Code Online (Sandbox Code Playgroud)

我使用了这段代码,但它不起作用

data.groupby('TEAM 1')['Team 2'].count()

Run Code Online (Sandbox Code Playgroud)

python pandas

0
推荐指数
1
解决办法
68
查看次数