小编Sem*_*aki的帖子

为什么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
查看次数

为什么初始化器列表只能在声明时使用?

可以使用所谓的初始化列表来初始化数组。

例如:

int my_array[3] = {10, 20, 30};
Run Code Online (Sandbox Code Playgroud)

当我们为数组设置一组初始值时,这非常有用。但是,这种方法一旦声明就无法为数组分配新值。

my_array = {10, 20, 30};

error: assigning to an array from an initializer list
Run Code Online (Sandbox Code Playgroud)

但是,有时我们有一些过程需要将数组初始化为一些初始值(例如,在循环内),因此我认为能够使用初始化列表将值分配给已声明的变量将非常有用。

我的问题是:是否有理由在声明时拥有这种功能,但一旦声明数组就没有?为什么在一种情况下有效,而在另一种情况下无效?

c++ arrays initializer-list

14
推荐指数
1
解决办法
948
查看次数

带小数位数的地板和天花板

我需要用特定的小数位数来计算浮点数。

所以:

2.1235 with 2 decimals --> 2.12
2.1276 with 2 decimals --> 2.12  (round would give 2.13 wich is not what I need)
Run Code Online (Sandbox Code Playgroud)

该函数np.round接受一个decimals参数,但现在看来,功能ceilfloor不接受小数位数的和始终与零个小数返回一个数字。

当然我可以乘以数字10^ndecimals,然后应用地板,最后除以10^ndecimals

new_value = np.floor(old_value * 10**ndecimals) / 10**ndecimals
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个内置函数可以做到这一点而无需进行操作。

python numpy floor ceil

12
推荐指数
2
解决办法
7524
查看次数

“将目录标记为源根目录”到底有什么作用?

在 Pycharm 中,如果您在项目内的文件夹中单击鼠标右键,则可以将其标记为sources root,这样您就可以从该文件夹和子文件夹中导入模块。

但是,这样做只会使您的程序可以在 Pycharm 内部运行,如果我尝试从 Pycharm 外部(例如从控制台)执行,它会抱怨找不到某些模块,这就是我面临的问题。

如果我将某个文件夹标记为源根目录,我的程序运行良好,但我需要了解它的作用,以便即使不使用 Pycharm 也可以配置程序以查找此模块。

我想知道这个选项到底做了什么,以及如何在不使用它的情况下获得相同的行为。

它只是__init__.py在根文件夹中添加一个文件?它是否在做类似的事情:

import sys
sys.path.insert(0, my_folder)
Run Code Online (Sandbox Code Playgroud)

python import pycharm

9
推荐指数
1
解决办法
2735
查看次数

matplotlib慢速3D散射旋转

我正在使用matplotlib来分散绘制点的3D矩阵.我使用以下代码:

import pylab as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

my_data = np.random.rand(6500,3)  # toy 3D points

fig = plt.figure()
ax = Axes3D(plt.gcf())
ax.scatter(my_data[:,0],my_data[:,1],my_data[:,2])
plt.show()
Run Code Online (Sandbox Code Playgroud)

它有效,所以它打开一个窗口,我可以看到我的观点.

但是,如果我尝试用鼠标旋转绘图(单击并拖动它),它的旋转速度非常慢.

我认为对于如此缓慢且滞后的旋转,6500点并不是很多,所以我想知道是否有任何预配置要加速它.

注意:我尝试使用Matlab,我可以旋转更大的散点图,没有任何延迟,因此它不是计算机限制.

有人可以运行此代码,看看是否也经历了慢速旋转?

编辑:使用系统监视器我可以看到,当旋转点时,只使用一个CPU,因此matplotlib不会并行化该过程.

我的电脑规格:

  • Intel(R)Core(TM)i5-3550 CPU @ 3.30GHz
  • 显卡:Xeon E3-1200 v2 /第三代核心处理器图形控制器
  • 内存:10GB RAM
  • 硬盘:三星SSD 500 GB

运行Ubuntu 16.10

python matplotlib scatter-plot

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

禁用Matlab R2016b隐式扩展

Matlab R2016b带有一个怪物会杀死我们所有人:操作员隐式扩展.

基本上如果你有一个矩阵A和一个向量B,你现在可以做A + B(没有bsxfunrepmat).听起来不错吧?

但是,如果您提供列向量和行向量,它也可以工作!!

例:

a = 1:4      % row vector
b = (1:4)'   % column vector

% before R2016b:    
a + b
   Matrix dimensions must agree.

% after R2016b:
a + b 
    ans =

    2     3     4     5
    3     4     5     6
    4     5     6     7
    5     6     7     8
Run Code Online (Sandbox Code Playgroud)

扩展两个向量并给出一个矩阵作为结果!! 这非常糟糕,因为您可能在没有注意到的情况下进行了完全不需要的操作.

所以我的问题是:是否有一种方法可以禁用隐式扩展并回复Matrix dimensions must agree错误?

matlab vector matrix expansion

7
推荐指数
0
解决办法
414
查看次数

Matlab将mat加载到变量中

将.Mat文件中的数据直接加载到变量中时,它会存储结构而不是变量本身.

例:

myData.mat 包括var1,var2,var3

如果我做:

load myData.mat
Run Code Online (Sandbox Code Playgroud)

它将在我的工作区中创建变量var1,var2和var3.好.

如果我将load返回的内容分配给变量,它会存储一个结构.这是正常的,因为我正在加载几个变量.

foo = load('myData.mat')

foo = 
  struct with fields:
    var1
    var2
    var3
Run Code Online (Sandbox Code Playgroud)

但是假设我只对我感兴趣var1并希望直接存储到变量中foo.

Load有一个选项,只能加载.mat文件中的特定变量,但它仍然存储一个struct

foo = load('myData.mat', 'var1')
foo = 
      struct with fields:
        var1
Run Code Online (Sandbox Code Playgroud)

我希望var1被直接分配到foo.

我当然可以这样做:

foo = load('myData.mat', 'var1')
foo = foo.var1;
Run Code Online (Sandbox Code Playgroud)

但它应该是一种在一行中自动执行此操作的方法吗?

matlab load

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

计算第二个最小值的有效方法

给定矩阵,很容易计算最小值的值和索引:

A = rand(10);
[value, index] = min(A(:));
Run Code Online (Sandbox Code Playgroud)

但是我还想恢复第二个最小值(最大值为idem).

我当然可以采用以下两种方法中的任何一种:

  1. 将A转换为向量并对其进行排序.

    PROS:我可以恢复第二个,第三个...... n最小值

    缺点:如果A很大,排序很昂贵

  2. 一旦找到A的最小位置,我可以将该值替换为大值(例如:Inf),然后min再次运行.

    PROS:比排序便宜

    缺点:我必须修改我的矩阵(并将修改后的值保存在aux变量中).在大型矩阵上重新运行min也很昂贵.

我想知道是否有更好的解决方案:

当计算min算法时必须跟踪到目前为止找到的最小值,直到新值具有较低的值(然后我们更新该值).相反,如果我们跟踪n到目前为止发现的最后一个最小值将允许恢复最小值n.

我可以实现这一点,但我想知道它是否是最好的方法,或者它是否已经实现.

matlab max min

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

聚焦 TextInput 时的大写键盘

TextInput在 react-native 中有一个字段,我设置autofocustrue这样它在加载时会自动打开键盘。

我想要的是它以大写字母打开键盘(不仅对于第一个字符,我希望启用大写键,以便在键入时所有字母都为大写)

在此处输入图片说明

根据TextInput 文档,我可以指定与keyboardType道具一起使用的键盘类型。

有几种可用的键盘:默认、电子邮件、数字、电话...

但是他们都没有做我想做的:(

聚焦 TextInput 时,如何强制键盘为大写?

keyboard android textinput react-native

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

为什么std :: map有一个名为count的成员函数?

我正在学习C++,显然是一种检查a中是否存在特定键的方法std::map是使用成员函数count.

我的第一个问题是:键不应该是唯一的吗?确实检查文档它们是唯一的,因此count将返回0或1.

打电话不是有点违反直觉count吗?为什么不exist呢?

对于我来说,计数在一个列表中是有意义的,在该列表中您期望出现一些元素,但如果该方法只允许返回1或0,则对我来说没有意义.

我错过了什么吗?是否有理由将其称为count或者只是一个糟糕的命名?

c++ stdmap std

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