小编Aar*_*son的帖子

如何使用SMOP将Matlab转成Python代码

我已经通过 pip 安装了 SMOP,它似乎工作正常。我的 python 文件夹中有smop-script.pysmop.exe文件\scripts\

假设我有一个名为的 matlab 文件myMatlabFile.m位于C:\Users\MyMatlabCode. 如何使用 smop 翻译该文件?

SMOP 文档仅包含打开文件\smop\夹中包含的文件的示例,main.py而我没有类似的内容。此外,github页面没有说明它是否仅适用于 2.7 或 3. 或其他版本。

我希望这个包能加速我的 Matlab -> Python 3.6 转换,但如果现在有更好的翻译器,请让我知道。

python matlab translate

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

在D3中将箭头颜色与线条颜色匹配

我试图做明显的事情,让我的有向图的链接的箭头颜色匹配边缘颜色.令人惊讶的是,我没有找到一个完整的解决方案,虽然这个较旧的帖子似乎是一个很好的起点.我可以根据下面的描述调整该解决方案,或者如果有一种创建箭头的优良方法可以实现这种效果,我将非常感激.

首先,我有一个线性渐变颜色函数,通过属性为我的边缘着色,如下所示:

var gradientColor = d3.scale.linear().domain([0,1]).range(["#08519c","#bdd7e7"]);
Run Code Online (Sandbox Code Playgroud)

然后,就像之前的帖子一样,我有一个添加标记的功能:

function marker (color) {
  var reference;
  svg.append("svg:defs").selectAll("marker")
    .data([reference]) 
   .enter().append("svg:marker")    
    .attr("id", String)
    .attr("viewBox", "0 -5 10 10")
    .attr("refX", 15)  // This sets how far back it sits, kinda
    .attr("refY", 0)
    .attr("markerWidth", 9)
    .attr("markerHeight", 9)
    .attr("orient", "auto")
    .attr("markerUnits", "userSpaceOnUse")
   .append("svg:path")
    .attr("d", "M0,-5L10,0L0,5")
    .style("fill", color);
  return "url(#" + reference + ")";    };
Run Code Online (Sandbox Code Playgroud)

然后我的链接定义是基于Curved Links示例的链接定义.

var link = svg.selectAll(".link")
  .data(bilinks)
  .enter().append("path")
  .attr("class", "link")
  .style("fill", "none")
  .style("opacity", "0.5")    
  .style("stroke-width", "2")  
  .style("stroke", function(d) { return …
Run Code Online (Sandbox Code Playgroud)

javascript svg d3.js

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

找到具有左特征值的马尔可夫稳态(使用 numpy 或 scipy)

我需要使用一些 python 代码使用转换矩阵的左特征向量找到马尔可夫模型的稳态。

这个问题中已经确定scipy.linalg.eig 无法提供所描述的实际左特征向量,但在那里演示了修复。官方文档和往常一样,大多无用且难以理解。

比错误格式更大的问题是生成的特征值没有任何特定的顺序(没有排序并且每次都不同)。所以如果你想找到对应于 1 个特征值的左特征向量,你必须寻找它们,这会带来它自己的问题(见下文)。数学很清楚,但如何让 python 计算它并返回正确的特征向量尚不清楚。这个问题的其他答案,比如这个,似乎没有使用左特征向量,所以那些不是正确的解决方案。

这个问题提供了部分解决方案,但它没有考虑较大转换矩阵的无序特征值。所以,只需使用

leftEigenvector = scipy.linalg.eig(A,left=True,right=False)[1][:,0]
leftEigenvector = leftEigenvector / sum(leftEigenvector)
Run Code Online (Sandbox Code Playgroud)

很接近,但通常不起作用,因为[:,0]位置中的条目可能不是正确特征值的特征向量(在我的情况下通常不是)。

好的,但是 的输出scipy.linalg.eig(A,left=True,right=False)是一个数组,其中的[0]元素是每个特征值的列表(不按任何顺序),然​​后在位置上跟随着[1]与这些特征值对应的顺序的特征向量数组。

我不知道通过特征值对整个事物进行排序或搜索以提取正确的特征向量(所有特征值为 1 的特征向量均由向量条目的总和归一化)的好方法。我的想法是获得特征值的索引等于 1,然后从特征向量数组中提取这些列。我的这个版本又慢又麻烦。首先,我有一个函数(不太好用)来查找与值匹配的最后一个位置:

# Find the positions of the element a in theList
def findPositions(theList, a):
  return [i for i, x in enumerate(theList) if x == a]
Run Code Online (Sandbox Code Playgroud)

然后我像这样使用它来获得与特征值 = 1 匹配的特征向量。

M = transitionMatrix( G )
leftEigenvectors = scipy.linalg.eig(M,left=True,right=False)
unitEigenvaluePositions = findPositions(leftEigenvectors[0], 1.000)
steadyStateVectors …
Run Code Online (Sandbox Code Playgroud)

python numpy markov-chains scipy eigenvector

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

将networkx图导出到json图文件的方法?

我有一个关于将 networkx 图保存到 json 图的方法的后续问题?,但 Stack Overflow 不允许我在 Sirus 的答案中添加我想澄清的评论,所以这是我的问题。

将 JSON 数据写入文本文件的最佳方法是什么?

我正在尝试执行一个显而易见的步骤,即编写由 NetworkX 生成的 json_graph 文件,以便我可以将其读入 D3.js。我可以毫无问题地将其打印到控制台,因此我可以验证它是否可以创建适当的 JSON 数据。但我将其保存到文件的尝试失败了,并且(与 Python 一样)文档基本上毫无价值。这是我尝试过的:

with open('networkdata1.json', 'w') as outfile1:
    outfile1.write(json_graph.node_link_data(G))
Run Code Online (Sandbox Code Playgroud)

它给了我错误:“TypeError:期望一个字符缓冲区对象”如果我使用简单的字符串而不是 json 图运行相同的代码,那么它可以完美地工作。问题在于将 json 对象转换为文本,我不知道该怎么做,而且我找不到任何包含此步骤的示例。我确信一旦你了解了它就会很简单,但是如果你不了解 Python,那么从网上提供的材料中很难弄清楚这些事情。

将 JSON 数据写入文本文件的最佳方法是什么?如果这是正确的方法,那么还有什么可能导致此问题?

python json networkx

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

查找在 Python 中将一个集群列表转换为另一个集群列表的映射

我正在使用 scikit-learn 对一些数据进行聚类,我想比较不同聚类技术的结果。我立即面临这样一个问题,即不同运行的聚类标签不同,因此即使它们完全相同地聚类,列表的相似度仍然很低。

说我有

list1 = [1, 1, 0, 5, 5, 1, 8, 1]
list2 = [3, 3, 1, 2, 2, 3, 8, 3]
Run Code Online (Sandbox Code Playgroud)

我(理想情况下)喜欢一个函数,它以翻译字典的形式返回最佳映射,如下所示:

findMapping(list1, list2)
>>> {0:1, 1:3, 5:2, 8:8}
Run Code Online (Sandbox Code Playgroud)

我说“最佳映射”是因为假设list3 = [3, 3, 1, 2, 2, 3, 8, 4]thenfindMapping(list1, list3)仍然会返回相同的映射,即使最终1变成 a4而不是 a 3

所以最好的映射是最小化两个列表之间差异数量的映射。我认为这是一个很好的标准,但可能有更好的标准。

我可以编写一个试错优化算法来做到这一点,但我并不是第一个想要比较聚类算法结果的人。我希望这样的东西已经存在,我只是不知道它叫什么。但我四处寻找,并没有找到任何答案。

关键是在应用最佳翻译后,我将测量列表之间的差异,所以也许有一种方法可以测量不同索引的数字列表之间的差异,而无需将翻译作为中间步骤,这也很好。

====================================

根据 Pallie 的回答,我能够创建 findMapping 函数,然后我更进一步创建了一个翻译函数,该函数返回转换为第一个列表标签的第二个列表。

def translateLabels(masterList, listToConvert):    
  contMatrix = contingency_matrix(masterList, listToConvert)
  labelMatcher = munkres.Munkres()
  labelTranlater = labelMatcher.compute(contMatrix.max() - contMatrix)

  uniqueLabels1 …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis array-difference python-3.x scikit-learn

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

在Numpy数组的列内进行条件替换

我有一个numpy数组,例如:

theData= [[0, 1, 1, 1],[0, 1, 3, 1],[3, 4, 1, 3],[0, 1, 2, 0],[2, 1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

如何用-1 替换第一列中的所有零

用替换整个数组中的所有零是很容易的theData[theData==0] = -1,所以我认为这样可以

theData[theData[:,0] == 0] = -1
theData[:,0 == 0] = -1
Run Code Online (Sandbox Code Playgroud)

但是对于第一列值为零的任何行,它们会将行中的所有值更改为-1。不是我的目标,我想将替换限制在第一列(或任何其他列)。

显然,这可以通过循环来完成。也可以通过将第一列提取为一维数组,在其中进行替换,然后将其转置复制到原始第一列上来完成。但我怀疑有一种更快,更Pythonic的方法可以做到这一点。也许使用np.where,但我不知道。

python arrays replace numpy where

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