Ask Your Question
0

problem with list: how to count different elements?

asked 2014-07-09 16:47:39 +0200

mresimulator gravatar image

updated 2014-07-09 16:48:29 +0200

Hello experts!

Im working with graphs.

My code is:

import numpy as np
import networkx as nx

M = np.zeros([6,6])

M[0,2]=1
M[2,0]=1
M[2,3]=1
M[3,2]=1
M[2,1]=1
M[1,2]=1
M[4,5]=1
M[5,4]=1

G=nx.Graph(M)

A=nx.node_connected_component(G,2)

Doing that, A is a list with all the nodes connected with the node 2, ie: A=[0, 1, 2, 3, 2]

1) Why the element '2' is repeated? 2) If, instead, we use A=nx.node_connected_component(G,0), we get A=[0, 1, 2, 3]. In this case: why now the element '0' is not repeated? 3) If we have a list K=[1,2,3,4,1,1,1], and we do P=list(set(K)), we get P=[1,2,3,4] (doing that we can eliminate the repeated elements in the list). But if I do the same with the list A obtained in my code, I get A=[0, 1, 2, 3, 2]. Why this doest work?

Please help!

Thanks a lot

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2014-07-09 17:24:35 +0200

vdelecroix gravatar image

updated 2014-07-12 21:41:28 +0200

Hi,

This is a problem with Sage integers fighting with numpy integers

sage: A[2] == A[4]
False
sage: type(A[2])
<type 'sage.rings.integer.Integer'>
sage: type(A[4])
<type 'numpy.int64'>

You can solve the issue working only with Sage integers as follows

sage: M = matrix(6)
sage: M[0,2]=M[2,0]=M[2,3]=1
sage: M[3,2]=M[2,1]=M[1,2]=1
sage: M[4,5]=M[5,4]=1
sage: G = Graph(M)
sage: A = G.connected_component_containing_vertex(2)
sage: A
[0, 1, 2, 3]

(using networx is fine as well)

There is already an old ticket related to that problem on the Sage trac server: #13386: comparison of Sage integer with Numpy integer

EDIT: if you want to solve it on your example, use

sage: nx.node_connected_component(G, np.int(2))
[0, 1, 2, 3]

If you use only numpy and networkx, there is no need to use Sage. Just use the standard Ipython you will have less troubles.

Vincent

edit flag offensive delete link more

Comments

Thanks a lot Vincent. The problem is that in my full-code, 'M' is an numpy array with NxN element. How can I fix my problem keeping workin this this Numpy array? Thanks

mresimulator gravatar imagemresimulator ( 2014-07-11 00:02:56 +0200 )edit

I updated my answer accordingly. But I do not see the point of using numpy and networkx inside Sage.

vdelecroix gravatar imagevdelecroix ( 2014-07-12 21:42:02 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2014-07-09 16:47:39 +0200

Seen: 562 times

Last updated: Jul 12 '14