我正在编写一个程序,使用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);
...
答案 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中从未有过。张贴者在帖子中在那里定义了此功能,以显示它可以如何完成。但我怀疑您根本不需要它。