我scipy.optimize
用来最小化12个参数的函数.
我刚刚开始优化并仍在等待结果.
有没有办法强制scipy.optimize
显示其进度(比如已经完成了多少,目前最好的点是什么)?
我一直在努力学习如何为Python编写C扩展,并希望确定我理解PyArg_ParseTupleAndKeywords的工作原理.
我相信第一个参数是一个PyObject指针,它指向一个参数数组,这些参数按照它们传递的顺序传递给C-extension函数.第二个参数是传递的关键字列表,它们被传递的位置,以及非常可能的某种指示标记,告诉关键字开始和位置变得无关紧要.
然后,PyArg_ParseTupleAndKeywords使用其关键字列表(第四个参数)来映射用关键字指定的参数,以及格式字符串(第三个参数)和应该复制适当值的C变量(第五个和+参数)的地址.
我的理解是否正确?当我阅读在线文档时,我所看到的只是对"位置参数和关键字参数"的引用,这让我感到有些不知所措.处理PyArg_ParseTupleAndKeywords的Python解释器的文件在哪里?
我能够使用编写新的xlsx工作簿
import xlsxwriter
def write_column(csvlist):
workbook = xlsxwriter.Workbook("filename.xlsx",{'strings_to_numbers': True})
worksheet = workbook.add_worksheet()
row = 0
col = 0
for i in csvlist:
worksheet.write(col,row, i)
col += 1
workbook.close()
Run Code Online (Sandbox Code Playgroud)
但无法找到在现有工作簿中编写的方法.请帮助我使用xlswriter或任何替代方法在现有工作簿中编写/更新单元格.
我在不使用Cython的情况下编写Python C-Extension.
我想在C中分配一个double数组,在内部函数中使用它(恰好在Fortran中)并返回它.我指出C-Fortran接口在C中完美运行.
static PyObject *
Py_drecur(PyObject *self, PyObject *args)
{
// INPUT
int n;
int ipoly;
double al;
double be;
if (!PyArg_ParseTuple(args, "iidd", &n, &ipoly, &al, &be))
return NULL;
// OUTPUT
int nd = 1;
npy_intp dims[] = {n};
double a[n];
double b[n];
int ierr;
drecur_(n, ipoly, al, be, a, b, ierr);
// Create PyArray
PyObject* alpha = PyArray_SimpleNewFromData(nd, dims, NPY_DOUBLE, a);
PyObject* beta = PyArray_SimpleNewFromData(nd, dims, NPY_DOUBLE, b);
Py_INCREF(alpha);
Py_INCREF(beta);
return Py_BuildValue("OO", alpha, beta);
}
Run Code Online (Sandbox Code Playgroud)
我调试了这段代码,当我尝试从a创建alpha时,我遇到了Segmentation错误.到那里一切正常.功能drecur_工作,如果删除它我会遇到同样的问题.
现在,围绕C数据定义PyArray的标准方法是什么?我找到了文档,但没有很好的例子.还有,内存泄漏怎么样?返回之前INCREF是否正确,以便保留alpha和beta的实例?那些不再需要的解除分配怎么样?
编辑 …
有人可以向我解释为什么尝试#1不起作用?
import numpy as np
x = np.zeros(1, dtype=np.dtype([('field', '<f8', (1,2))]))
Run Code Online (Sandbox Code Playgroud)
尝试#1:
x[0]['field'] = np.array([3.,4.], dtype=np.double)
print x, '\n'
Run Code Online (Sandbox Code Playgroud)
[([[ 3. 0.]])]
(为什么只'3'
复制了?)
尝试#2:
x['field'][0] = np.array([3.,4.], dtype=np.double)
print x
Run Code Online (Sandbox Code Playgroud)
[([[ 3. 4.]])]
(这有效)
有人可以向我解释为什么这不起作用:
步骤1)创建一个简单的NPZ文件
import numpy as np
a1 = np.zeros((3,2), dtype=np.double)
np.savez('npzfile.npz', field1=a1)
Run Code Online (Sandbox Code Playgroud)
步骤2)打开NPZ文件并尝试为其赋值
npzfile = np.load('npzfile.npz')
npzfile['field1'][0,0] = 3.2
print npzfile['field1']
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]
Run Code Online (Sandbox Code Playgroud)
换句话说,尝试分配3.2
给数组没有任何作用。为什么?
我有一个Python程序基本上执行以下操作:
for j in xrange(200):
# 1) Compute a bunch of data
# 2) Write data to disk
Run Code Online (Sandbox Code Playgroud)
1)大约需要2-5分钟
2)大约需要1分钟
请注意,内存中存储的数据太多.
理想情况下,我想要做的是以避免空闲CPU的方式将数据写入磁盘.这在Python中可行吗?谢谢!
如果我们有一个Numpy重新组合:
x = np.array([(1.,2.)], dtype=np.dtype([('a','<f8'),('b','<f8')]))
我们可以在Python中访问它的字段:
x['a']
或者x['b']
如果这个数组被传递给C程序,PyArrayObject
我们如何访问它的字段?
我意识到我们可以通过C获取dtype:PyArray_Descr *dtype = PyArray_DTYPE(arr)
PyObject *fields = dtype->fields
但是如何使用它来访问数据x['a']
?
我正在尝试将一些带有 Mex 扩展的 MatLab 代码移动到带有 numpy 和 scipy 库的 Python 中。使用这个精彩的教程http://www.scipy.org/Cookbook/C_Extensions/NumPy_arrays,我很快采用 C 函数从 Python 调用。但是一些 C 函数调用 MatLab 函数,所以我必须通过从 C 代码调用 numpy 和 scipy 函数来替换这段代码。
我试图做这样的事情Extending and Embedding the Python Interpreter。但是,我遇到了问题:如何将数组传递给函数参数。此外,在模块中查找函数然后为参数构建元组的这种漫长方式似乎并不优雅。
那么,例如,如何从 C 代码调用 numpy 模块中的 sum 函数?
我将不胜感激任何想法或链接。鲁本
PS这是一个例子:
PyObject *feedback(PyObject *self, PyObject *args){
PyArrayObject *Vecin;
double mp=0,ret;
if( !PyArg_ParseTuple(args,"O!d",&PyArray_Type,&Vecin,&mp)
|| Vecin == NULL ) return NULL;
/* make python string with module name */
PyObject *pName = PyString_FromString("numpy");
if( pName == NULL){
fprintf(stderr,"Couldn\'t setup …
Run Code Online (Sandbox Code Playgroud) 假设我有:
from collections import namedtuple
NT = namedtuple('name', ['x'])
Run Code Online (Sandbox Code Playgroud)
有人可以解释之间的区别:
NT.x = 3
var = NT(x=3)
我可以改变NT.x
任何东西(可变)但是var.x
是不可改变的.为什么会这样?
我的计算机中有一个专用的计算GPU(不用于显示).它的属性是:
Device 0: "Tesla C2050"
CUDA Driver Version / Runtime Version 6.0 / 6.0
CUDA Capability Major/Minor version number: 2.0
Total amount of global memory: 2688 MBytes (2818244608 bytes)
(14) Multiprocessors, ( 32) CUDA Cores/MP: 448 CUDA Cores
GPU Clock rate: 1147 MHz (1.15 GHz)
Memory Clock rate: 1500 Mhz
Memory Bus Width: 384-bit
L2 Cache Size: 786432 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers …
Run Code Online (Sandbox Code Playgroud) python ×9
numpy ×6
python-c-api ×4
cuda ×1
excel ×1
file ×1
namedtuple ×1
output ×1
recarray ×1
scipy ×1
xlsxwriter ×1