使用ctypes将numpy 2d - 数组传递给ac函数的正确方法是什么?到目前为止我的当前方法(导致段错误):
C代码:
void test(double **in_array, int N) {
int i, j;
for(i = 0; i<N; i++) {
for(j = 0; j<N; j++) {
printf("%e \t", in_array[i][j]);
}
printf("\n");
}
}
Run Code Online (Sandbox Code Playgroud)
Python代码:
from ctypes import *
import numpy.ctypeslib as npct
array_2d_double = npct.ndpointer(dtype=np.double,ndim=2, flags='CONTIGUOUS')
liblr = npct.load_library('libtest.so', './src')
liblr.test.restype = None
liblr.test.argtypes = [array_2d_double, c_int]
x = np.arange(100).reshape((10,10)).astype(np.double)
liblr.test(x, 10)
Run Code Online (Sandbox Code Playgroud) 使用的numpy的可以减去的形状(3)阵列的优良广播规则v从一个形状(5,3)排列X以
X - v
Run Code Online (Sandbox Code Playgroud)
结果是一个shape(5,3)数组,其中每一行i都是差异X[i] - v.
有没有办法减去形状(n,3)数组w,X以便从w整个数组中减去每一行X而不显式使用循环?
我想知道如何从.wav文件中获取样本,以便执行两个.wav文件的窗口连接.
任何人都可以告诉我该怎么做?
如何从Tkinter Entry小部件中获取整数类型?
如果我尝试使用该值variable_name.get(),它表示它是一个str.如果我尝试使用更改类型int(variable_name.get()),则说int只能接受字符串或数字.
欢迎任何帮助!
我试图以data直方图样式绘制矢量.这总是很容易,因为plot(data, type="h")我正是我想要的.但是,颜色存在问题.我的矢量data看起来像这样:
data = c(1,2,2,3,1,1,2,3,1,2,2,3, ... )
Run Code Online (Sandbox Code Playgroud)
我想看到的是,每个1都是用一种颜色绘制的,每种颜色都是2不同的颜色,每种颜色都是相同的3.我试图实现这一目标
plot(data, type="h", col=c("red","blue","green")
Run Code Online (Sandbox Code Playgroud)
但它失败了R圈在颜色矢量上,所以第一个栏是红色,第二个是蓝色,第三个是绿色,第四个是红色,依此类推.
在一般的解决方案中,我非常感兴趣,因为我的data向量并不总是由数字组成1,2而且3.在许多情况下,向量保存从1到6的数字.
有人知道如何解决这个问题吗?
假设有一个对角矩阵M:
#import numpy as np
M = np.matrix(np.eye(5, dtype=bool))
Run Code Online (Sandbox Code Playgroud)
有没有人知道访问所有非对角线元素的简单方法,这意味着所有元素都是False?在R我可以通过执行简单地做到这一点
M[!M]
Run Code Online (Sandbox Code Playgroud)
不幸的是,这在Python中无效.
我尝试使用自制软件在Mac OSX 10.10上安装图形工具.brew构建过程工作正常,但是当我尝试导入图形工具时,我得到了这个问题中描述的错误.自制软件的另一个问题是我总是为python2.7构建图形工具,并将软件包安装在Python 2.7 sit-packages文件夹中.但我想在Python 3.4中使用它.这些是我尝试从源代码构建图形工具的原因.
该./configure命令也自动使用Python 2.7.所以我用它传递了所需的Python版本./configure PYTHON=python3.4
然后它会检测正确的版本以及相关路径,但会因以下错误而崩溃:
configure:error:
无法将测试程序链接到Python.也许主要的Python库已经安装在一些非标准的库路径中.如果是,请通过LDFLAGS环境变量将其传递给configure.
示例:./ configure LDFLAGS =" - L/usr/non-standard-path/python/lib"================================================== ====================错误!您可能必须为您的发行版安装Python包的开发版本.这个包的确切名称因其而异.
================================================== ====================
使用和不使用PYTHON变量集时会发生错误.从./configure我的输出我可以看到一切正常,除了最后一行,它说:
检查python开发环境的所有组件的一致性...没有
上述行是什么意思,我如何在我的机器上正确安装图形工具?
我从API获取以下数据.我试图使用Python脚本访问餐厅名称并让脚本显示它.这是我的文件:
test.py
with open('data.json') as data_file:
data = json.load(data_file)
for restaurant in data:
print data ['restaurants'][0]['restaurant']['name']
Run Code Online (Sandbox Code Playgroud)
我的JSON文件如下:(简化)
{
"results_found": 3296,
"results_start": 0,
"results_shown": 20,
"restaurants": [
{
"restaurant": {
"R": {
"res_id": 9101083
},
"id": "9101083",
"name": "My Meat Wagon",
"address": "Market Square, Smithfield, Dublin Dublin 7",
"locality": "Smithfield",
"city": "Dublin",
"city_id": 91,
"latitude": "53.3489980000",
"longitude": "-6.2788120000",
"zipcode": "Dublin 7",
"events_url": "https://www.zomato.com/dublin/my-meat-wagon-smithfield/events#tabtop?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1",
"establishment_types": []
}
},
{
"restaurant": {
"R": {
"res_id": 9101628
},
"id": "9101628",
"name": "Wowburger",
"url": "https://www.zomato.com/dublin/wowburger-temple-bar?utm_source=api_basic_user&utm_medium=api&utm_campaign=v2.1", …Run Code Online (Sandbox Code Playgroud) 假设有一个网格,其中包含一些点,就像下面的图中一样.
我的目标是计算每个网格的点数.这是我的第一次尝试.
for tupel in point_list:
a=0
b=0
for i in self.boxvector:
if tupel[0] < i:
a=self.boxvector.index(i)-1
break
for i in self.boxvector:
if tupel[1] < i:
b=self.boxvector.index(i)-1
break
farray[a][b]+=1
Run Code Online (Sandbox Code Playgroud)
它有效,但速度很慢.有没有加快一点?
我使用一个名为的变量boxvector来定义网格.在这个例子中,boxvector是:boxvector = [-1., -.5, 0, .5, 1.].网格总是二次方,最大值为-1和1.方框表示通过farray,看起来像farray = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]].因此,每个算法在相应的框中找到一个点时,每个框都有一个值递增.point_list具有表单point_list = [(x0,y0),(x1,y1),(x3,y3), ...]
谢谢您的帮助 !
我对 C++11 非常陌生,迭代器和统一初始化存在问题,我不明白。
考虑以下示例,该示例无法编译:
#include <iostream>
#include <vector>
int main() {
std::vector<int> t{1, 2, 3, 4, 5};
auto iter{t.begin()};
for (; iter != t.end(); ++iter) {
std::cout << *iter;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在第 6 行中,使用统一初始化来初始化向量。在第 7 行中,我尝试使用迭代器执行相同的操作。这是行不通的。将第 7 行更改为 就auto iter = t.begin()可以了。我知道我可以简单地使用“基于范围”,但问题是:为什么统一初始化不适用于迭代器,但适用于基本类型,例如int i{0};?