我试图按顺序沿路径排序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
我有一个 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
我有想要使用非线性色彩图用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) 我sympy在Jupyter笔记本中使用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功能,但它们都给了我相同的结果.还是我错过了别的什么?
我需要从 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?
(我不能简单地删除所有零值,因为顶部的数据中会有零)
我之前创建了一个递归函数来查找列表的产品.现在我已经创建了相同的功能,但使用了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函数的问题只是它不是为了处理和清空列表而设计的吗?或者还有其他原因吗?
我似乎无法在网上找到问题或任何解释原因的问题,我只能找到解决该特定人员问题的问题,无需解释.
下面的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) 我是编程初学者。我正在阅读 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)