小编Ale*_*ams的帖子

在numpy中将1D数组转换为2D数组

我想通过指定2D数组中的列数将1维数组转换为2维数组.有点像这样的东西:

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])
Run Code Online (Sandbox Code Playgroud)

numpy有没有像我的功能"vec2matrix"那样工作的功能?(我知道你可以像二维数组一样索引一维数组,但这不是我所拥有的代码中的一个选项 - 我需要进行这种转换.)

python arrays numpy matrix multidimensional-array

93
推荐指数
5
解决办法
21万
查看次数

何时以及为什么交叉有利于差异进化?

我为我正在做的边项目实现了差分进化算法.因为交叉步骤似乎涉及很多参数选择(例如交叉概率),所以我决定跳过它并仅使用变异.该方法似乎工作正常,但我不确定如果我介绍交叉,我是否会获得更好的性能.

主要问题:将差异引入差异进化的动机是什么?您能提供一个玩具示例,其中介绍交叉超出纯变异吗?

我的直觉是,交叉会在二维中产生类似下面的内容.假设我们有两个父矢量(红色).均匀交叉可以在其中一个蓝点处产生新的试验向量.

我不确定为什么这种探索会被认为是有益的.事实上,如果高适应度解决方案遵循一些线性趋势,这似乎会使性能变差.在下图中,假设红点是当前的总体,最佳解决方案是在右下角.人口正在山谷中行进,使得右上角和左下角产生不良解决方案.左上角产生"好"但不是最理想的解决方案.注意均匀交叉如何产生与改进方向正交的试验(蓝色).我使用了1的交叉概率和忽略的变异来说明我的观点(见代码).我想这种情况可能会在优化问题中经常出现,但可能会误解某些东西.

注意:在上面的例子中,我隐含地假设群体在这个空间中被随机初始化(均匀),并且已经开始收敛到中心谷(正左上到右下)的正确解.

这个玩具示例是凸的,因此差分演化甚至不是合适的技术.然而,如果这个主题嵌入在多模态健身景观中,那么交叉似乎可能是有害的.虽然交叉确实支持探索,这可能是有益的,但我不确定为什么人们会选择在这个特定的方向上进行探索.

以上示例的R代码:

N = 50

x1 <- rnorm(N,mean=2,sd=0.5)
x2 <- -x1+4+rnorm(N,mean=0,sd=0.1)
plot(x1,x2,pch=21,col='red',bg='red',ylim=c(0,4),xlim=c(0,4))

x1_cx = list(rep(0, 50))
x2_cx = list(rep(0, 50))
for (i in 0:N) {
  x1_cx[i] <- x1[i]
  x2_cx[i] <- x2[sample(1:N,1)]
}

points(x1_cx,x2_cx,pch=4,col='blue',lwd=4)
Run Code Online (Sandbox Code Playgroud)

后续问题:如果交叉在某些情况下是有益的,是否有合理的方法来a)确定您的特定问题是否会受益于交叉,以及b)如何调整交叉参数以优化算法?

一个相关的stackoverflow问题(我正在寻找更具体的东西,例如玩具示例):在差分进化算法中跨越的重要性是什么?

一个类似的问题,但不是特定的差异演化:遗传算法中的交叉效率

optimization r evolutionary-algorithm differential-evolution

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

Julia中不区分大小写的字符串比较

我确信这有一个简单的答案,但是如何在Julia中比较两个字符串并忽略大小写?我已经破解了一个相当不优雅的解决方案:

function case_insensitive_match{S<:AbstractString}(a::S,b::S)
    lowercase(a) == lowercase(b)
end
Run Code Online (Sandbox Code Playgroud)

肯定有更好的办法!

string julia

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

两个二维数组的线性插值

在上一个问题(在二维数组上使用 numpy.interp的最快方法)中,有人要求以最快的方式实现以下内容:

np.array([np.interp(X[i], x, Y[i]) for i in range(len(X))])
Run Code Online (Sandbox Code Playgroud)

假设XY是具有多行的矩阵,因此 for 循环代价高昂。在这种情况下有一个很好的解决方案可以避免 for 循环(请参阅上面的链接答案)。


我面临着一个非常相似的问题,但我不清楚在这种情况下是否可以避免 for 循环:

np.array([np.interp(x, X[i], Y[i]) for i in range(len(X))])
Run Code Online (Sandbox Code Playgroud)

换句话说,我想使用线性插值对存储在两个矩阵X和的行中的大量信号进行上采样Y。我希望在 numpy 或 scipy (scipy.interpolate.interp1d) 中找到一个通过广播语义支持此操作的函数,但到目前为止我似乎找不到一个。

其他要点:

  • 如果有帮助,行X[i]x已在我的应用程序中预先排序。此外,就我而言,len(x)它比len(X[i]).

  • 该函数scipy.signal.resample几乎可以满足我的要求,但它不使用线性插值...

interpolation numpy scipy array-broadcasting

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

在Julia中将数组转换为SharedArray

简单的问题。假设我有一些Array:

julia> A = randn(3,3)
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为一个SharedArray可以通过并行进程访问/更改的?截至目前,尚未实现自动执行此操作的转换功能:

julia> SharedArray(A)
ERROR: MethodError: `convert` has no method matching ...
Run Code Online (Sandbox Code Playgroud)

我认为唯一的方法是使用构造函数(并传递适当的初始化函数init):

SharedArray(T::Type, dims::NTuple; init=false, pids=Int[])
Run Code Online (Sandbox Code Playgroud)

julia

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

在Julia中创建UpperTriangularMatrix的子矩阵

给定列和行的列表,我想生成一个cholesky分解的子矩阵.例:

julia>  A = rand(10,10)
julia>  R = chol(A'*A)
julia>  ind = [1,3,6,8,9]
julia>  R[ind,ind]
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误:

ERROR: BoundsError: attempt to access 5x5
UpperTriangular{Float64,Array{Float64,2}}:
 1.28259  0.0           0.0  0.0  0.0
 0.0      6.51646e-314  0.0  0.0  0.0
 0.0      0.0           0.0  0.0  0.0
 0.0      0.0           0.0  0.0  0.0
 0.0      0.0           0.0  0.0  0.0
at index [2,1]
in _unsafe_getindex at multidimensional.jl:197
in getindex at abstractarray.jl:483
Run Code Online (Sandbox Code Playgroud)

我知道这适用于典型的矩阵,但这种UpperTriangular类型显然需要不同的东西......我找不到相关的文档.

julia

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