小编ele*_*ora的帖子

如何检测非方形矩阵的所有行是否在python中是正交的

我可以使用np.linalg.matrix_rank(A)测试矩阵的等级.但是如何测试A的所有行是否正确有效?

我可以采取所有行对并计算它们之间的内在产品,但有更好的方法吗?

我的矩阵的行数少于列数,行数不是单位向量.

python math numpy scipy

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

如何加速棘手的随机数生成

我有一些代码执行许多日志tancos双打操作.我需要这个尽可能快.目前我使用的代码如

#include <stdio.h>
#include <stdlib.h>
#include "mtwist.h"
#include <math.h>


int main(void) {
   int i;
   double x;
   mt_seed();
   double u1;
   double u2;
   double w1;
   double w2;
   x = 0;
   for(i = 0; i < 100000000; ++i) {
     u1 = mt_drand();
     u2 = mt_drand();
     w1 = M_PI*(u1-1/2.0);
     w2 = -log(u2);
     x += tan(w1)*(M_PI_2-w1)+log(w2*cos(w1)/(M_PI_2-w1));
   }
   printf("%f\n",x); 

   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc.

有两种明显的方法可以加快速度.首先是选择更快的RNG.第二是加快先验功能.
要做到这一点,我想知道

  1. 如何在x86上的程序集中实现tan和cos?我的CPU是AMD FX-8350,如果它有所作为.(答案fcoscosfptantan.)
  2. 如何使用查找表来加速计算?我只需要32位的精度.例如,你可以使用一个大小为2 ^ 16的表来加速tan和cos操作吗?

英特尔优化手册

如果不需要使用80位的扩展精度来评估超越函数,则应用程序应考虑使用基于软件的替代方法,例如使用插值技术的基于查找表的算法.通过选择所需的数值精度和查找表的大小,并利用SSE和SSE2指令的并行性,可以通过这些技术提高超越性能. …

c math performance assembly micro-optimization

6
推荐指数
4
解决办法
795
查看次数

如何测试均匀性

0根据泊松过程模拟在T 范围内的时间.事件间的时间均为指数,我们知道时间的分布应该在范围内统一0T.

def poisson_simul(rate, T):
    time = random.expovariate(rate)
    times = [0]
    while (times[-1] < T):
        times.append(time+times[-1])
        time = random.expovariate(rate)
    return times[1:]
Run Code Online (Sandbox Code Playgroud)

我只想进行一次均匀性测试,例如Kolmogorov-Smirnov测试.然而,我无法解决如何在scipy中做到这一点.如果我做

import random
from scipy.stats import kstest
times = poisson_simul(1, 100)
print kstest(times, "uniform") 
Run Code Online (Sandbox Code Playgroud)

这是不对的 .它给了我

(1.0, 0.0)
Run Code Online (Sandbox Code Playgroud)

我只是想测试该点均匀地范围内选择的假设0T.你是怎么做到scipy的?

python statistics scipy

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

更新不是来自conda的所有pip包

在我的Windows 7系统上,我尝试使用conda安装尽可能多的软件包.这些很容易更新

conda update all
Run Code Online (Sandbox Code Playgroud)

不幸的是,有些软件包没有出现在conda中,但是可以通过pip获得,所以我使用pip安装它们.更新Windows上的所有pip包似乎更难,但是

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
Run Code Online (Sandbox Code Playgroud)

是我发现的一种方式.

但是,这会尝试更新所有软件包,即使是由conda安装的软件包我相信.

有没有办法只更新由pip安装的那些软件包?

python windows pip anaconda conda

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

使用Python 2.7.x中的所有可打印字符对IP地址进行编码

我想使用所有可打印字符将IP地址编码为尽可能短的字符串.根据https://en.wikipedia.org/wiki/ASCII#Printable_characters,这些是代码20hex到7Ehex.

例如:

shorten("172.45.1.33") --> "^.1 9" maybe.
Run Code Online (Sandbox Code Playgroud)

为了使解码变得容易,我还需要编码的长度始终相同.我还想避免使用空格字符以便将来更容易解析.

怎么能这样做?

我正在寻找一个适用于Python 2.7.x的解决方案.


到目前为止,我尝试修改Eloims在Python 2中的工作答案:

首先,我为Python 2安装了ipaddress backport(https://pypi.python.org/pypi/ipaddress).

#This is needed because ipaddress expects character strings and not byte strings for textual IP address representations 
from __future__ import unicode_literals
import ipaddress
import base64

#Taken from http://stackoverflow.com/a/20793663/2179021
def to_bytes(n, length, endianess='big'):
    h = '%x' % n
    s = ('0'*(len(h) % 2) + h).zfill(length*2).decode('hex')
    return s if endianess == 'big' else s[::-1]

def def encode(ip):
    ip_as_integer = int(ipaddress.IPv4Address(ip))
    ip_as_bytes = …
Run Code Online (Sandbox Code Playgroud)

python

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

核心连通组件算法

对于无向图,我有4,000,000,000(40亿)个边.它们在大型文本文件中表示为节点ID对.我想计算此图的连接组件.不幸的是,一旦你将带有边缘的节点ID加载到内存中,这就需要超过128GB的RAM.

是否有一个用于查找相对简单的连接组件的核心算法?或者甚至更好,它可以与Unix命令工具和现有(python)库拼凑在一起吗?

algorithm graph space-complexity

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

如何读取边列表以制作scipy稀疏矩阵

我有一个大文件,其中每行有一对8个字符串.就像是:

ab1234gh iu9240gh
Run Code Online (Sandbox Code Playgroud)

在每一行.

此文件实际上代表一个图形,每个字符串都是一个节点ID.我想在文件中读取并直接创建一个scipy稀疏邻接矩阵.然后,我将使用python中提供的众多工具之一在此矩阵上运行PCA

有没有一种巧妙的方法来做到这一点,还是我需要首先在RAM中制作一个图形,然后将其转换为稀疏矩阵?由于文件很大,我想尽可能避免中间步骤.

最后,我将稀疏邻接矩阵提供给http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD.

python numpy scipy igraph scikit-learn

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

使用googlebenchmark对简单代码进行基准测试的问题

我想对这个简单的C代码进行基准测试:

float f(float x[], float y[]) {
  float p = 0;
  for (int i = 0; i <64; i++)
    p += x[i] * y[i];
  return p;
}
Run Code Online (Sandbox Code Playgroud)

我的动机是尝试不同的编译器标志以及gcc和clang来看看它有什么不同.

我找到了这个测试框架,并一直试图让它工作.虽然我是C++的新手,但这是我的最大努力:

#include <benchmark.h>
#include <benchmark_api.h>

#include <cstdio>
#include <random>

std::random_device seed;
std::mt19937 gen(seed());

float f(float* x, float* y) {
  float p = 0;
  for (int i = 0; i <64; i++) {
    p += x[i] * y[i];
  }
  return p;
}

void f_benchmark(benchmark::State& state) {
  while (state.KeepRunning()) {
    benchmark::DoNotOptimize(f((float*) state.range(0), …
Run Code Online (Sandbox Code Playgroud)

c++

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

对pandas数据帧的行进行采样,与列中的计数成比例

我有一个大型的pandas数据帧,大约有10,000,000行.每个代表一个特征向量.特征向量以自然组形式出现,组标签位于一个名为的列中group_id.我想随机抽取10%行的说法,但与每个行的数量成比例group_id.

例如,如果group_id's是,A, B, A, C, A, B那么我想要我的一半采样行,有group_id A六分之六,六分group_id B之一group_id C.

我可以看到pandas函数示例,但我不知道如何使用它来实现这个目标.

python pandas

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

C语言中“复杂”的默认类型

根据该文档我读C99及更高版本支持float complexdouble complexlong double complex为复杂类型。但是,使用时,此代码会编译而不会发出警告gcc -Wall -Wextra

#include <stdio.h>
#include <complex.h>

int main() {
    int a, b, c, d;
    float re, im;

    scanf("%d %d", &a, &b);
    complex matrix[a][b]; /* <------ */

    for(c=0; c<a; c++) {
        for(d=0; d<b; d++) {
            scanf("%f%fi", &re, &im);
            matrix[c][d] = re + im * I;
        }
    }

    for(c=0; c<a; c++) {
        for(d=0; d<b; d++) {
            printf("%.2f%+.2fi ", creal(matrix[c][d]), cimag(matrix[c][d]));
        }
        printf("\n");
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 这是有效的C还是gcc的奇数?
  • 什么类型complex matrix[a][b];给我们? …

c gcc

5
推荐指数
2
解决办法
333
查看次数