小编kwi*_*nks的帖子

带有方向约束的旅行推销员

我试图按顺序沿路径排序3D坐标数组.一个样品:

points = np.array([[ 0.81127451,  0.22794118,  0.52009804],
                   [ 0.62986425,  0.4546003 ,  0.12971342],
                   [ 0.50666667,  0.41137255,  0.65215686],
                   [ 0.79526144,  0.58186275,  0.04738562],
                   [ 0.55163399,  0.49803922,  0.24117647],
                   [ 0.47385621,  0.64084967,  0.10653595]])
Run Code Online (Sandbox Code Playgroud)

这些点是随机顺序的,但总是有一条通过它们的路径.我正在使用LKH解算器(Helsgaun 2009)找到适应旅行商问题(TSP)的路径.它涉及两个修改:

  • 在原点处或附近添加一个点.这是我到目前为止所处理的每个实例中的最佳起点.这是我的想法,我没有其他依据.
  • 在每个点的零距离处添加一个点.这使得求解器找到到路径另一端的路径.这个想法来自这个问题.

请注意,TSP不涉及位置,只涉及节点之间的距离.所以求解者确实"知道"(或关心)我在3D中工作.我只是像这样制作一个距离矩阵:

import numpy as np
from scipy.spatial.distance import pdist, squareform

# Add a point near the origin.
points = np.vstack([[[0.25, 0, 0.5]], points])
dists = squareform(pdist(points, 'euclidean'))

# Normalize to int16s because the solver likes it.
d = 32767 * …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra traveling-salesman graph-algorithm

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

向量化 3D 数组的 NumPy 协方差

我有一个 3D numpy 形状数组(t, n1, n2)

x = np.random.rand(10, 2, 4)
Run Code Online (Sandbox Code Playgroud)

我需要计算另一个 3D 数组y,其形状(t, n1, n1)为:

y[0] = np.cov(x[0,:,:])
Run Code Online (Sandbox Code Playgroud)

...对沿第一个轴的所有切片依此类推。

所以,一个循环的实现将是:

y = np.zeros((10,2,2))
for i in np.arange(x.shape[0]):
    y[i] = np.cov(x[i, :, :])
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将其矢量化,以便一次性计算所有协方差矩阵?我试着做:

x1 = x.swapaxes(1, 2)
y = np.dot(x, x1)
Run Code Online (Sandbox Code Playgroud)

但它没有用。

python numpy vectorization covariance multidimensional-array

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

Matplotlib的非线性色图

我有想要使用非线性色彩图用contourf/tricontourf绘制的数据.

我发现了一个脚本(见下文),只要级别介于0和正数之间,就可以为色彩图提供一个很好的解决方案.

但是,我的数据是负数(介于-50和0之间).不幸的是,根据我的情况调整水平根本不起作用(见图,子图3).那么有什么我需要考虑的吗?有没有人对我有任何建议,甚至可能遇到同样的问题?

我将衷心感谢您的帮助.

from pylab import *
from numpy import *
from matplotlib.colors import LinearSegmentedColormap

class nlcmap(LinearSegmentedColormap):
    """A nonlinear colormap"""

    name = 'nlcmap'

    def __init__(self, cmap, levels):
        self.cmap = cmap
        self.monochrome = self.cmap.monochrome
        self.levels = asarray(levels, dtype='float64')
        self._x = self.levels/ self.levels.max()
        self.levmax = self.levels.max()
        self.levmin = self.levels.min()
        self._y = linspace(self.levmin, self.levmax, len(self.levels))

    def __call__(self, xi, alpha=1.0, **kw):
        yi = interp(xi, self._x, self._y)
        return self.cmap(yi/self.levmax, alpha)

if __name__ == '__main__':

    y, x = mgrid[0.0:3.0:100j, 0.0:5.0:100j]
    H = 50.0 * exp( …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

如何在sympy中简化sqrt表达式

sympyJupyter笔记本中使用v1.0 .我无法通过表达来简化我的喜好.这是一个玩具的例子; 它做同样的事情,我更复杂的表达做...

import sympy
sympy.init_printing(use_latex='mathjax')
x, y = sympy.symbols("x, y", real=True, positive=True)
sympy.simplify(sqrt(2*x/y))
Run Code Online (Sandbox Code Playgroud)

给我...

   来自同情的表达

但我更喜欢......

   在此输入图像描述

我怎样才能sympy以这种方式组织事物?我尝试了其他一些simplify功能,但它们都给了我相同的结果.还是我错过了别的什么?

python symbolic-math sympy

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

获取伦敦境内所有维基百科文章的坐标

一般来说,我希望获得所有维基百科文章的链接(和标题)以及伦敦境内的坐标.我尝试使用谷歌,但不幸的是没有适当的搜索条件.任何提示?

伦敦地图

python wikipedia openstreetmap wikipedia-api

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

从 3d numpy 数组中删除 2d 切片

我需要从 3D numpy 立方体中删除最后一个数组。我有:

a = np.array(
[[[1,2,3],
 [4,5,6],
 [7,8,9]],

[[9,8,7],
 [6,5,4],
 [3,2,1]],

[[0,0,0],
 [0,0,0],
 [0,0,0]],

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

如何使用零子数组(如立方体底部)删除数组np.delete

(我不能简单地删除所有零值,因为顶部的数据中会有零)

python numpy cube multidimensional-array

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

Reduce函数不处理空列表

我之前创建了一个递归函数来查找列表的产品.现在我已经创建了相同的功能,但使用了reduce函数和lamdba.

当我运行此代码时,我得到了正确的答案.

items = [1, 2, 3, 4, 10]
print(reduce(lambda x, y: x*y, items))
Run Code Online (Sandbox Code Playgroud)

但是,当我给出一个空列表时,会发生错误 - reduce() of empty sequence with no initial value.为什么是这样?

当我创建递归函数时,我创建了处理空列表的代码,reduce函数的问题只是它不是为了处理和清空列表而设计的吗?或者还有其他原因吗?

我似乎无法在网上找到问题或任何解释原因的问题,我只能找到解决该特定人员问题的问题,无需解释.

python reduce lambda list

4
推荐指数
2
解决办法
2851
查看次数

为什么不使用Scipy的FFT代码结果与Scipy FFT不一样?

下面的FFT代码没有得到类似于scipyPython库的结果。但是我不知道这段代码有什么问题。

import numpy as np
import matplotlib.pyplot as plt
#from scipy.fftpack import fft

def omega(p, q):
   return np.exp((-2j * np.pi * p) / q)

def fft(x):
   N = len(x)
   if N <= 1: return x
   even = fft(x[0::2])
   odd = fft(x[1::2])
   combined = [0] * N
   for k in range(N//2):
     combined[k] = even[k] + omega(k,N) * odd[k]
     combined[k + N//2] = even[k] - omega(k,N) * odd[k]
   return combined

 N = 600
 T = 1.0 / 800.0
 x = …
Run Code Online (Sandbox Code Playgroud)

python numpy fft matplotlib scipy

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

我在《Grokking Algorithms》一书中发现了一个错误

我是编程初学者。我正在阅读 Aditya Y Bhargava 所著的“Grokking 算法”一书。”在第一个代码中我发现了一个错误。这本书描述了二进制算法。它说算法必须取数组的平均值,然后取平均值,但是我调试了代码,它只需要大量的数组,然后将其减少 1。可能是版本之间的差异,因为我使用的是 Python 3.7,但在书中它是 Python 2.7

def binary_search(list, item):
    low = 0
    high = len(list)-1

    while low <= high:
        mid = int(low + high)
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1

    return None

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(binary_search(my_list, 1))
Run Code Online (Sandbox Code Playgroud)

python

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