使用as_ints在Julia中将CartesianIndex数组转换为2D矩阵

时间:2019-03-27 16:19:48

标签: arrays julia

我正在编写一个程序,使用findall提取类型为 Array {Union {Missing,Float64},2} 的数组的特定元素; findall返回变量 Array {CartesianIndex {2},1};

我尝试使用as_ints将此变量转换为标准矩阵,如下所述: https://stackoverflow.com/a/54300691/9130305

我收到一条错误消息:

  

错误:UndefVarError:未定义as_ints

此功能在Julia版本1.1.0中仍然存在吗?如果是,该如何使用? 感谢您的帮助。

我在MacBook Pro的Atom中使用Julia

我使用的代码 ...

indices = findall(x -> x == 4000,data);

ind = as_ints(indices);

...

2 个答案:

答案 0 :(得分:0)

我不确定您想要得到什么,但这可能正是您想要的:

julia> x = rand(5,5)
5×5 Array{Float64,2}:
 0.162856  0.19944   0.497173  0.644154  0.0535536
 0.249625  0.86901   0.451791  0.614897  0.185165
 0.674177  0.995515  0.261636  0.705788  0.410553
 0.029235  0.743839  0.672526  0.489376  0.0748679
 0.980195  0.892695  0.531932  0.493069  0.683519

julia> c = findall(t->t<0.5, x)
13-element Array{CartesianIndex{2},1}:
 CartesianIndex(1, 1)
 CartesianIndex(2, 1)
 CartesianIndex(4, 1)
 CartesianIndex(1, 2)
 CartesianIndex(1, 3)
 CartesianIndex(2, 3)
 CartesianIndex(3, 3)
 CartesianIndex(4, 4)
 CartesianIndex(5, 4)
 CartesianIndex(1, 5)
 CartesianIndex(2, 5)
 CartesianIndex(3, 5)
 CartesianIndex(4, 5)

julia> getindex.(c, [1 2])
13×2 Array{Int64,2}:
 1  1
 2  1
 4  1
 1  2
 1  3
 2  3
 3  3
 4  4
 5  4
 1  5
 2  5
 3  5
 4  5

简而言之-您可以在getindex个条目的向量上广播CartesianIndex,并在列中选择要获取的索引。

这是您要寻找的吗?

(这与我现在看到的crstnbr在Converting Array of CartesianIndex to 2D-Matrix in Julia中所写的内容相同)

答案 1 :(得分:0)

似乎您是在说要使用findall从矩阵中提取元素。除非我误会,否则您不需要CartesianIndex es转换为数组。只需直接使用它们来检索元素。例如:

A = rand(5, 4) # source array
f = x -> x >= 0.7 # filtering function
ind = findall(f, A)  # returns vector of CartesianIndex
elements = A[ind]  # retrieve elements

无需转换,这就是CartesianIndex的用途。

或者,您可以使用逻辑索引来获取元素:

elements = A[f.(A)]

或过滤:

elements = filter(f, A)

或理解:

elements = [a for a in A if f(a)]

对于链接文章中的to_ints函数,Julia中从未有过。张贴者在帖子中在那里定义了此功能,以显示它可以如何完成。但我怀疑您根本不需要它。