小编sta*_*nri的帖子

使用python,numpy和matplotlib绘制蒙面曲面图

我正在使用matplotlib 1.1.0绘制表面.

绘图Z轴被掩盖如下:

Zm = ma.masked_where((abs(z_grid) < 1.09) & (abs(z_grid) > 0.91), (z_surface))
surf = ax.plot_surface(X, Y,Zm, rstride=2, cstride=2, cmap=colors,linewidth=0, antialiased=False)
Run Code Online (Sandbox Code Playgroud)

但我没有看到在情节上应用的面具.我将面具本身绘制为子图

surf = ax.plot_surface(X, Y,ma.getmask(Zm), rstride=2, cstride=2, cmap=colors,linewidth=0, antialiased=False)
Run Code Online (Sandbox Code Playgroud)

哪个有效,所以我知道我的面具实际上包含真值.

完整代码:

from pylab import *
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import numpy
from mpl_toolkits.mplot3d.axes3d import Axes3D
from  matplotlib import patches
from matplotlib.figure import Figure
from matplotlib import rcParams


fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.add_subplot(1, 2, 1,projection='3d')

pole_positions_orig = [-0.6+0.73j];
zero_positions_orig = [0.29-0.41j];

surface_limit = 1.7;
min_val …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib

8
推荐指数
2
解决办法
6014
查看次数

如何在python中仅重新绘制图形上的一组轴?

我使用子图在一个图中有几个图.每个轴实例用于引用一组特定的轴.像这样:

ax[0] = fig.add_subplot(2, 2, 1)
ax[1] = fig.add_subplot(2, 1, 2)
ax[2] = fig.add_subplot(2, 2, 2,projection='3d')
Run Code Online (Sandbox Code Playgroud)

如您所见,我的一组轴是3d图.我对其他图的其中一个属性进行了更改,如下所示:

plt.setp(zh, xdata=event.xdata,ydata=event.ydata)
Run Code Online (Sandbox Code Playgroud)

并重新绘制如下:

zh.figure.canvas.draw();
Run Code Online (Sandbox Code Playgroud)

然而,这正在重新绘制包含3D投影在内的所有情节的整体图形,这会显着降低速度.

我试过这个:

ax[0].draw_artist(zh)
Run Code Online (Sandbox Code Playgroud)

我认为这有希望,但轴没有更新.我没有收到错误,它只是没有重新绘制.我也尝试过:

zh.axes.draw(zh,ax[0])
Run Code Online (Sandbox Code Playgroud)

但是这给出了错误:

AttributeError: 'Line2D' object has no attribute 'open_group'
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法,以及如何重新绘制我正在改变而不是整个数字的轴实例?

编辑:

zh是一个Line2D对象:

zh, = plt.plot(z.real, z.imag, 'x', ms=10)
Run Code Online (Sandbox Code Playgroud)

python matplotlib

4
推荐指数
1
解决办法
8127
查看次数

如何将此case语句更改为if语句?

我想检查节点属性的值.这个case陈述是我到目前为止所做的,它有效:

case node[:languages][:ruby][:host_cpu]
   when "x86_64"
   ...
   when "i686"
   ...
end
Run Code Online (Sandbox Code Playgroud)

我想做的是改用if声明.这是我试过的:

if node[:languages][:ruby][:host_cpu]?("X86_64")
   ...
end
Run Code Online (Sandbox Code Playgroud)

这基于以下内容,其中有效.

if platform?("ubuntu")
    ...
end
Run Code Online (Sandbox Code Playgroud)

但是,我的尝试没有用.它if在行上给出了一个语法错误,说有一个意外的\n并且$end是预期的.

我发现有两种表现方式if.第一个是我上面演示的那个,(显然)只适用于资源,并且if_only与节点一起工作.像这样

if_only {node[:languages]} 
Run Code Online (Sandbox Code Playgroud)

这似乎仅用于检查节点的存在,以及在do上下文中.

如何使用if语句检查节点的值?一种方法检查值,但仅检查资源,另一种方法检查节点,但仅限于它们的存在,而不是它们的值.

ruby chef-infra

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

从Android中的AsyncTask检索返回的字符串

我想检索此文件的内容并将其保存到字符串.

我尝试过使用AsyncTask(基于这个答案),这是我的课程.

class RetreiveURLTask extends AsyncTask<Void, Void, String> {

    private Exception exception = null;
    public String ResultString = null;

    protected String doInBackground(Void ... something) {
        URL url;
        try {
            url = new URL("http://stream.lobant.net/ccfm.info");
            HttpURLConnection urlConnection;
            urlConnection = (HttpURLConnection) url.openConnection();
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());
            String stream_url = IOUtils.toString(in, "UTF-8");
            urlConnection.disconnect();

            return stream_url;

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

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

嵌入式for循环在python中的意外行为

非常简单的代码嵌套示例:

所有代码都会创建一个初始化为零的列表列表.它遍历列表行和列,每个位置都有一个值.出于某种原因,在打印最终矢量时,每列的2D列表的最后一行是重复的.

Number_of_channels=2
Coefficients_per_channel=3

coefficient_array=[[0]*Coefficients_per_channel]*Number_of_channels 
print coefficient_array

for channel in range(Number_of_channels):
    for coeff in range(Coefficients_per_channel):
        coefficient_array[channel][coeff]=coeff*channel
        print coefficient_array[channel][coeff]

print coefficient_array
Run Code Online (Sandbox Code Playgroud)

输出:

[[0, 0, 0], [0, 0, 0]]
0
0
0
0
1
2
[[0, 1, 2], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)

我实际上期望:

[[0, 0, 0], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)

任何人都知道这是怎么回事?

python

2
推荐指数
1
解决办法
111
查看次数

为什么pyserial说我有11个参数?

我使用pyserial打开python连接:

self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)
Run Code Online (Sandbox Code Playgroud)

这与此处的pyserial文档匹配:

__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,我收到此错误:

line 391, in run

self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)

TypeError: __init__() takes at most 11 arguments (12 given)
Run Code Online (Sandbox Code Playgroud)

当我取出最后一个参数(最后一个None)时,错误消失了.

如果一个超过1D,我还打印出所有变量名.不是那样的.

我使用的是python 2.6.6,文档是pyserial 2.6.我一直在努力寻找如何找到我正在使用的串口版本.

为什么python声称我提供12个参数,而我只提供11个?我必须在这里遗漏一些东西.

编辑:

如何找到我安装的串口版本?我正在运行的这段代码可能是为另一个版本的python编写的(也是串行编写的).我需要找出我想要的串行版本作为参数.

python pyserial

2
推荐指数
1
解决办法
229
查看次数

在systemverilog头文件中存储自定义类型

我在整个systemverilog代码中使用了大量自定义类型.

目前我在每个文件中都有typedef的副本,但是如果我可以在头文件中指定typedef并且在每个模块中只包含一个头文件,那将会很棒.这将使我不必维护typedef的多个副本,并且还会显着清理我的代码.

我试图通过将typedef粘贴到头文件中来尝试这样做,但是工具(Vivado 2014.1)不喜欢typedef在模块之外并且我得到语法错误的事实.

是否有一种语法可用于指定多个模块通用的typedef?

system-verilog

0
推荐指数
1
解决办法
598
查看次数