小编HYR*_*YRY的帖子

用于Python 2.7的Microsoft Visual C++编译器

我下载了用于Python 2.7的Microsoft Visual C++编译器,并安装它,完整路径vcvarsall.bat是:

C:\Users\UserName\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat
Run Code Online (Sandbox Code Playgroud)

但是以下代码无法返回它的路径:

from distutils import msvc9compiler
msvc9compiler.find_vcvarsall(9.0)
Run Code Online (Sandbox Code Playgroud)

安装程序不会将安装信息写入注册表,并且从源代码中看find_vcvarsall(),它似乎无法vcvarsall.batVS90COMNTOOLS设置中找到该文件,因为它要求包含的文件夹的名称vcvarsall.batVC:

productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
Run Code Online (Sandbox Code Playgroud)

如何在不修改注册表或文件夹名称的情况下使用编译器?

python visual-c++

21
推荐指数
4
解决办法
7万
查看次数

dictproxy的目的是什么?

__dict__一种类型是一个dictproxy被只读对象.我想知道它的目的是什么.它仅适用于"不允许修改内置类型"吗?我发现了一种可以绕过它的方法.我知道修改内置类型并不是一个好主意.但我试图cdef class在飞行中修改Cython.

我想知道是否有任何危险的修改__dict__cdef class这种方式?

这是代码:

import gc
gc.get_referents(float.__dict__)[0]["square"] = lambda self: self*self
(3.14).square()
Run Code Online (Sandbox Code Playgroud)

python cython

20
推荐指数
2
解决办法
9395
查看次数

如何沿两个轴重复数组的元素?

我想分别沿轴0和轴1重复数组的元素M和N次:

import numpy as np

a = np.arange(12).reshape(3, 4)
b = a.repeat(2, 0).repeat(2, 1)
print(b)

[[ 0  0  1  1  2  2  3  3]
 [ 0  0  1  1  2  2  3  3]
 [ 4  4  5  5  6  6  7  7]
 [ 4  4  5  5  6  6  7  7]
 [ 8  8  9  9 10 10 11 11]
 [ 8  8  9  9 10 10 11 11]]
Run Code Online (Sandbox Code Playgroud)

这有效,但我想知道是否有更好的方法而无需创建临时数组.

python numpy

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

列表的内部实现是什么?

我很好奇如何list实现类型的对象.是吗

  1. 一个动态矢量,当它满时会自动增加它的大小.
  2. 附加项目的链接列表O(1),但访问项目是O(n).
  3. 具有O(log(n))项目访问权限的树结构.
  4. 具有O(1)项目访问权限的哈希表.

我很好奇,因为列表可以有键值对,使它们看起来像哈希表,但元素是有序的,看起来像一个向量.

编辑:因为length(list(runif(1e4)))是1,所以当将元素追加到列表时,它看起来像每次复制整个列表,这使得它非常慢:

但访问速度比矢量慢得多:

z1 <- runif(1e4)
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed 
0.060   0.000   0.062 
Run Code Online (Sandbox Code Playgroud)

但:

z1 <- list(runif(1e4))
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed 
1.31    0.00    1.31 
Run Code Online (Sandbox Code Playgroud)

初始化包含10000个元素的列表:

z1 <- as.list(runif(1e4))
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed …
Run Code Online (Sandbox Code Playgroud)

r list

19
推荐指数
1
解决办法
787
查看次数

如何创建动态数组

据我所知,listPython中的类型是一个动态指针数组,当项目被附加到它时会增加它的容量.NumPy中的数组使用连续的内存区域来保存数组的所有数据.

是否有任何类型可以动态增加其作为列表的容量,并将值存储为NumPy数组?类似于C#中的List.如果类型具有与NumPy数组相同的接口,那就太棒了.

我可以创建一个包含NumPy数组的类,并在它完整时调整此数组的大小,例如:

class DynamicArray(object):
    def __init__(self):
        self._data = np.zeros(100)
        self._size = 0

    def get_data(self):
        return self._data[:self._size]

    def append(self, value):
        if len(self._data) == self._size:
            self._data = np.resize(self._data, int(len(self._data)*1.25))
        self._data[self._size] = value
        self._size += 1
Run Code Online (Sandbox Code Playgroud)

但DynamicArray不能用作NumPy数组,我认为在np.resize()之前get_data()返回的所有视图都将保留旧数组.

编辑:数组模块中的数组类型是动态数组.以下程序测试列表和数组的增加因子:

from array import array
import time
import numpy as np
import pylab as pl

def test_time(func):
    arrs = [func() for i in xrange(2000)]
    t = []
    for i in xrange(2000):
        start = time.clock()
        for a in arrs:
            a.append(i)
        t.append(time.clock()-start)
    return np.array(t)

t_list …
Run Code Online (Sandbox Code Playgroud)

python numpy list

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

如何删除功能不连续的连接线

我正在绘制一些具有多个不连续性的函数.每个函数都以列表形式给出.我想只在函数连续的地方连接点.

以下是情节正在进行的简化示例.

x=linspace(0,1,100)    
y=zeros(100)
y[x<0.5] = x[x<0.5]
y[x>=0.5] = 1 + x[x>=0.5]
plot(x, y, '-o')
Run Code Online (Sandbox Code Playgroud)

在x = 0.5处存在不连续性,但是无论如何,绘图都将所有点与线连接起来.

我的功能当然不同.它们通常在不同的地方有几个不连续点.不连续性的标准很简单.比方说,如果函数跳跃超过0.5,我认为它在那一点是不连续的.

是否有一个选项可以告诉它放下功能不连续的点之间的连接线?我记得能够用gnuplot轻松做到这一点.

matplotlib

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

如何只导入包中没有exec __init__.py的子模块

从包中导入子模块时,包文件夹中的__init__.py文件将首先执行exec,如何禁用它.有时我只需要一个包中的一个函数,导入整个包有点重.

例如,pandas.util.clipboard模块不依赖于pandas中的任何其他功能.

from pandas.util.clipboard import clipboard_get将导入该函数,还导入所有pandas常用模块.是否有一些方法只导入剪贴板模块,因为它是我自己的应用程序文件夹中的模块.

python import module package

11
推荐指数
2
解决办法
3367
查看次数

为什么不用cython编译逻辑或`||`表达式?

例如,这是一个或表达式:

c  = f1 == 0 or f1 - f0 > th
Run Code Online (Sandbox Code Playgroud)

这是编译的C代码:

__pyx_t_24 = (__pyx_v_f1 == 0);
if (!__pyx_t_24) {
} else {
  __pyx_t_23 = __pyx_t_24;
  goto __pyx_L5_bool_binop_done;
}
__pyx_t_24 = ((__pyx_v_f1 - __pyx_v_f0) > __pyx_v_th);
__pyx_t_23 = __pyx_t_24;
__pyx_L5_bool_binop_done:;
__pyx_v_c = __pyx_t_23;
Run Code Online (Sandbox Code Playgroud)

为什么不输出这个?

__pyx_v_c = (__pyx_v_f1 == 0) || ((__pyx_v_f1 - __pyx_v_f0) > __pyx_v_th)
Run Code Online (Sandbox Code Playgroud)

是goto版本比||

c python cython

7
推荐指数
1
解决办法
420
查看次数

如何在 Numba @jit 中调用使用指针返回值的 ctypes 函数

例如,这是一个使用指针返回值的简单 c 函数:

void add(double x, double y, double *r)
{
    *r = x + y;
}
Run Code Online (Sandbox Code Playgroud)

我想为add()两个数组中的每个元素调用函数,并通过 numba @jit 函数收集结果。

先编译c代码:

!gcc -c -fpic func.c
!gcc -shared -o func.so func.o
Run Code Online (Sandbox Code Playgroud)

并通过 ctypes 加载它:

lib = ctypes.cdll.LoadLibrary("./func.so")
add = lib.add
add.argtypes = ctypes.c_double, ctypes.c_double, ctypes.c_void_p
add.restype = None
Run Code Online (Sandbox Code Playgroud)

然后是 numba 函数:

from numba import jit, float64

@jit(float64(float64[:], float64[:]))
def f(x, y):
    z = np.zeros_like(x)
    for i in range(x.shape[0]):
        add(x[i], y[i], &z[i]) # here I want to pass the …
Run Code Online (Sandbox Code Playgroud)

python ctypes numba

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

如何将日期时间移动到日,周或小时结束

以下是将所有时间都移动到月末的代码:

import numpy as np
import pandas as pd

times = np.array([
       '2013-07-22T02:10:32.000000000+0900',
       '2013-07-22T01:11:13.000000000+0900',
       '2013-07-21T23:23:32.000000000+0900',
       '2013-07-21T05:59:21.000000000+0900',
       '2013-07-21T05:57:30.000000000+0900',
       '2013-07-21T05:44:27.000000000+0900',
       '2013-07-20T10:45:17.000000000+0900',
       '2013-07-20T10:36:53.000000000+0900',
       '2013-07-20T09:57:46.000000000+0900',
       '2013-07-20T09:57:06.000000000+0900',
       '2013-07-20T09:30:57.000000000+0900',
       '2013-07-20T08:20:27.000000000+0900',], dtype='datetime64[ns]')

dti = pd.DatetimeIndex(times)
dti.shift(1, "M").values
Run Code Online (Sandbox Code Playgroud)

结果是:

array(['2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900',
       '2013-07-31T09:00:00.000000000+0900'], dtype='datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)

但是如何将所有时间一直移动到小时,一天或一周结束?

python pandas

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

标签 统计

python ×8

cython ×2

list ×2

numpy ×2

c ×1

ctypes ×1

import ×1

matplotlib ×1

module ×1

numba ×1

package ×1

pandas ×1

r ×1

visual-c++ ×1