小编use*_*784的帖子

在网络x中按重量着色边缘

我只发现了类似于我想要的东西:

基于重量着色网络x边缘

但是,我似乎无法将此应用于我的问题.我有一个带加权边的图,但权重不是唯一的(所以有15个边有权重1).我想根据它们的重量为我的边缘着色,重量越低,颜色越浅.

我尝试应用上述问题中建议的方法,但据我所知,这要求权重在每个边缘都是唯一的?

到目前为止,我已经按照不同边缘权重的升序生成了一个列表,并希望使用它来对可能的边缘颜色进行分类.我试图避免按重量绘制边缘,因为我可能需要绘制一个非常大的图形,边缘上有很大的权重范围.

如果不清楚,请在评论中告诉我,我会提供更具体的信息.

谢谢!

编辑:def draw_graph(目标):nlist = [目标] + G.邻居(目标)H = nx.subgraph(G,nlist)n = H.number_of_edges()颜色=范围(n)标签,权重= colour_and_label_edges(H )

pos = nx.spring_layout(H)
nx.draw(H, pos, node_color='#A0CBE2',edge_color=colours, node_size=100, edge_cmap=plt.cm.Blues, width=0.5, with_labels=False)
nx.draw_networkx_edge_labels(H, pos, edge_labels=labels)
plt.savefig("Graphs/edge_colormap_%s.png" % target) # save as png
plt.show() # display
pass

def colour_and_label_edges(graph):
    d={}
    for (u,v) in graph.edges():
        d[u,v]=graph[u][v]['weight']
    temp=[]
    for val in d.values():
        if val not in temp:
            temp.append(val)
    weights = sorted(temp,key=int)
    return d, weights
Run Code Online (Sandbox Code Playgroud)

上面的代码是不完整的,但想法是函数给我一个权重列表,如下:

[1,2,3,4,5,6,9,10,16,21,47,89,124,134,224]

然后,我想使用此列表为每个重量分配颜色,重量越高颜色越深.(我在这个例子中使用了一个非常小的子图,相对于数据集).希望能稍微清理一下:S

python graph matplotlib networkx

10
推荐指数
1
解决办法
7945
查看次数

计算宏中重复的长度

我正在尝试实现一个宏以允许创建 MATLAB 风格的矩阵。我有一个基本的工作宏,但我还有很长的路要走。

我希望能够强制执行正确的结构(每行中的元素数量相同),但我不确定如何在宏中执行此操作。我想我想强制每个内部重复具有相同的长度 - 这是我可以做的吗?

到目前为止,这是我的代码:

pub struct Matrix<T> {
    pub cols: usize,
    pub rows: usize,
    pub data: Vec<T>
}

macro_rules! mat {
    ( $($( $x:expr ),*);* ) => {
        {
            let mut vec = Vec::new();
            let mut rows = 0;

            $(
                $(
                    vec.push($x);
                )*
                rows += 1;
            )*
            Matrix { cols : vec.len()/rows, rows: rows, data: vec}
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

它有效,但正如您所见,它不是很安全。它对结构没有限制。

我想用这个宏做更多的事情,但我认为这是一个好的开始!

更新:

这是我制定的蹩脚实现的一些操场代码。如果有人有更好的建议,请告诉我!否则我会自己关闭它。

macros rust

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

使用数组(矩阵)创建结构体

我目前正在开发一个简单的项目来让自己熟悉 Rust。我没有太多系统编程经验,但我希望学习!

我正在尝试创建一个矩阵结构,但我发现很难弄清楚应该如何存储数据。我觉得我应该能够使用数组。矩阵的大小必须在构造时定义,因此我希望可以将数组存储在堆栈上。

现在我的代码如下所示:

use std::ops::Mul;
use std::ops::Add;
use std::ops::Div;

struct Matrix {
    cols: i32,
    rows: i32,
    // Of course this doesn't work!
    data: [f32; ..cols*rows]
}

// Below here are a bunch of stub methods.
impl Mul<f32> for Matrix {
    type Output = Matrix;

    fn mul(self, m: f32) -> Matrix {
        return self;
    }
}

impl Mul<Matrix> for Matrix {
    type Output = Matrix;

    fn mul(self, m: Matrix) -> Matrix {
        // Will use Strassen algorithm if large, traditional …
Run Code Online (Sandbox Code Playgroud)

arrays rust

5
推荐指数
1
解决办法
5975
查看次数

为具有多个参数的矩阵实现索引运算符

我正在尝试创建一个Matrix结构,并且我想覆盖Index运算符以让我拥有矩阵样式的索引。

例如:

let m = Matrix { ... DATA ... }
let entry = m[0,0]
Run Code Online (Sandbox Code Playgroud)

我的结构是这样的:

struct Matrix {
    cols: usize,
    rows: usize,
    data: Vec<f32>
}
Run Code Online (Sandbox Code Playgroud)

我一直在研究Index trait,但我不知道如何使这项工作发挥作用?另外,我希望能够在每个维度等中获取范围。

struct rust

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

实现泛型类型的均值函数

我正在尝试编写一个函数来返回a的平均值Vector.我希望它与泛型类型一起工作,但我在实现它时遇到了一些困难.

extern crate num; // 0.2.0

use num::Zero;
use std::ops::{Add, Div};

pub struct Vector<T> {
    pub size: usize,
    pub data: Vec<T>,
}

impl<T: Copy + Zero + Add<T, Output = T>> Vector<T> {
    pub fn sum(&self) -> T {
        self.data.iter().fold(T::zero(), |sum, &val| sum + val)
    }
}

impl<T: Copy + Zero + Add<T, Output = T> + Div<T, Output = T>> Vector<T> {
    pub fn mean(&self) -> T {
        let sum = self.sum();
        sum / self.data.len()
    }
} …
Run Code Online (Sandbox Code Playgroud)

generics rust

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

在Kivy中使用和移动小部件/按钮

我刚开始和Kivy一起开始,这与我以前的习惯有所不同,如果我犯了愚蠢的错误,我道歉!

现在我正在尝试创建一个执行以下操作的应用程序:

  • 允许创建节点(目前为省略号).
  • 允许用户通过拖动来定位节点.
  • 允许用户使用一条线连接节点.

到目前为止,我已经实现了第一次,第二次.

现在我的拖动效果不太好.如果我移动鼠标太快,它会取消移动方法(因为它不再接触).有没有更好的方法来产生拖动或者我只是提高刷新率(如果是这样的话?).

def on_touch_move(self, touch):
   if self.collide_point(touch.x, touch.y):
       self.pos=[touch.x-25, touch.y-25]
Run Code Online (Sandbox Code Playgroud)

我尝试使用Buttons,使用on_press方法更好地跟踪移动.但是现在我很难更新按钮的位置(主要是语法).

    class GraphNode(Button):
       background_disabled_down=1
       background_disabled_normal=1

       def moveNode(self):
           with touch:
               self.pos=[touch.x-25, touch.y-25]
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用触摸值,并不断收到一系列错误.(显然目前的尝试不起作用,我只是觉得这很有趣).

你可能会说,我也不知道如何摆脱按钮图形,因为我想使用椭圆.如果有人可以告诉我如何在按钮上更改椭圆的颜色,这将是一个额外的好处,这将是很酷的!

kv文件:

    <GraphNode>:
        size: 50, 50
        canvas:
            Ellipse:
                pos: self.pos
               size: self.size
        on_press:
            root.moveNode()
Run Code Online (Sandbox Code Playgroud)

我希望能够使用触摸信息更新位置,但不知道如何在此处实现.

完整的核心python代码:

    from kivy.app import App
    from kivy.uix.widget import Widget
    from kivy.uix.button import Button
    from kivy.properties import NumericProperty, ReferenceListProperty,\
        ObjectProperty
    from kivy.graphics import Color, Ellipse, Line


    class GraphInterface(Widget):
        node = ObjectProperty(None)



    class GraphApp(App):

        def build(self):
            node = GraphNode()
            game …
Run Code Online (Sandbox Code Playgroud)

python drawing python-2.7 kivy

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

在Kivy中创建动态绘制的线

这是我在此处发布的文章的继续:在Kivy中使用和移动小部件/按钮

我想在Kivy中的两个节点(椭圆)之间创建一条线,以便可以在移动节点时动态更新端点。这是我当前的混乱框架:

    class GraphEdge(Widget):

        def __init__(self, **kwargs):
            super(GraphEdge, self).__init__(**kwargs)
            with self.canvas:
                Line(points=[100, 100, 200, 100, 100, 200], width=1)
        pass
Run Code Online (Sandbox Code Playgroud)

我只是为这些点输入了一些占位符值,因为我不确定如何开始使用App中其他小部件的值。

我的最终目标是能够选择两个节点,然后单击一个按钮以添加行(甚至更干净的行)。我并不是要有人为我制作这个,只是一些正确方向的指针会很棒:)。

链接中提供了更多信息,但如果需要,我很乐意在此处提供更多信息。

谢谢。

编辑:

附加信息:

我想根据一些事件来更新线的位置。例如,如果将椭圆移动到直线上,则希望最接近的边缘捕捉到椭圆并跟随它。

def snap_to_node(self, node):
    if self.collide_widget(node):
        print "collision detected"
        self.line.points=[node.pos]
Run Code Online (Sandbox Code Playgroud)

(这只是一个很糟糕的尝试,我知道它根本不起作用。)最终目标是能够将“节点”与“边缘”连接起来。

编辑2:

所以我取得了一些进展。我创建了一个在时钟时间表中调用的更新方法:

def update(self, dt):
    # detect node collision
    self.edge.snap_to_node(self.node)


def snap_to_node(self, node):
    if self.collide_widget(node):
        print "collision detected"
        self.line.points+=node.pos
Run Code Online (Sandbox Code Playgroud)

现在,我要使其仅更新一个点集(其想法是将其中一个线段捕捉到节点)。

到目前为止,此代码仅检测直线上某一点上的集合。另外,这些点不会检测到碰撞。

python drawing python-2.7 kivy

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

使用泛型进行算术运算时,不能应用二进制运算

我正在尝试使用num crate Floattrait在我的库中实现泛型,但是我一直坚持与编译器作战。这有效:

struct Vector<T> {
    data: Vec<T>,
}

trait Metric<T> {
    fn norm(&self) -> T;
}

impl Metric<f32> for Vector<f32> {
    fn norm(&self) -> f32 {
        let mut s = 0.0;

        for u in &self.data {
            s = s + u * u;
        }

        s.sqrt()
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

use num::Float; // 0.2.0

struct Vector<T> {
    data: Vec<T>,
}

trait Metric<T> {
    fn norm(&self) -> T;
}

impl<T: Float> Metric<T> for Vector<T> {
    fn norm(&self) -> T …
Run Code Online (Sandbox Code Playgroud)

generics rust

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

C#:根据布尔值选择运算符(在一行中)

因为我觉得它可能是可能的,所以我试图摆脱光滑的衬垫.

我将把我的代码放在下面,然后尝试解释一下我想要实现的更多内容.

        for (int p = 0; p < 2; p++)
        {
            foreach (string player in players[p])
            {
                if (PlayerSkills[player].streak_count *>* 0) //This line
                    PlayerSkills[player].streak_count++;
                else
                    PlayerSkills[player].streak_count = 0;
            }
        }
Run Code Online (Sandbox Code Playgroud)

*(p == 0?>:<)根据p选择比较运算符.

当然,我写的是垃圾.但基本上我想在p == 0时使用> 0,在p >> 0时使用<0.有没有一个很好的方法来实现这一目标?

c# operators

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

明确说明引用的向量长度类型

我正试图让我的头围绕Rust,我正面临一个可能明显的错误.

我找到了一个计算两个向量的点积的方法,我想实现它,这样我就不需要使用向量来实现它.现在它看起来如下:

pub fn dot(&u: Vec<f32>, &v: Vec<f32>) -> f32 {
        let len = cmp::min(u.len(), v.len());
        let mut xs = &u[..len];
        let mut ys = &v[..len];

        let mut s = 0.;
        let (mut p0, mut p1, mut p2, mut p3, mut p4, mut p5, mut p6, mut p7) =
            (0., 0., 0., 0., 0., 0., 0., 0.);

        while xs.len() >= 8 {
            p0 += xs[0] * ys[0];
            p1 += xs[1] * ys[1];
            p2 += xs[2] * ys[2];
            p3 += xs[3] …
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

rust ×6

python ×3

drawing ×2

generics ×2

kivy ×2

python-2.7 ×2

arrays ×1

c# ×1

graph ×1

macros ×1

matplotlib ×1

networkx ×1

operators ×1

struct ×1