我正在尝试将以下python代码转换为julia 1.0.3
from numpy import *
xl,xr,yl,yr = 0,1,0,1
xs,ys = linspace(xl,xr,N),linspace(yl,yr,N)
x,y = np.meshgrid(xs,ys)
data=column_stack((ravel(x),ravel(y)))
idx1 = where((data[:,0]==xl) | (data[:,0]==xr) | (data[:,1]==yl) | (data[:,1]==yr))
我无法转换上述代码的最后一行。我遇到了findall()
和filter()
函数,但在我的情况下无法正确使用它们
答案 0 :(得分:1)
我了解您希望data
保留您可以从xs
和ys
的元素创建的所有对,并选择边界上data
的元素的索引到idx1
。如果是这种情况,这就是我将如何在Julia中实现它:
n=11
xl, xr, yl, yr = 0,1,0,1
xs, ys = range(xl, stop=xr, length=n), range(xl, stop=xr, length=n)
data = [(x,y) for y in ys for x in xs]
idx1 = findall(((x,y),) -> x in (xl,xr) || y in (yl, yr), data)
如果您希望data
是矩阵而不是向量,则可以这样做:
data2 = reduce(vcat, [x y] for y in ys for x in xs)
idx12 = filter(i -> data2[i,1] in (xl,xr) || data2[i,2] in (yl, yr), axes(data2, 1))
但在这种情况下,对我而言,在Julia中使用元组向量而不是矩阵会更自然。
您还可以考虑使用Iterators.product
函数来生成data
这样的vec(collect(Iterators.product(xs, ys)))
。