arrays - Julia,使用 findall 重置 3d 数组中的第三行
问题描述
我试图用来findall
获取一个一维数组的哪些元素大于第二个一维数组的元素的索引,然后使用这些索引将第三个一维数组的相应值设置为 0。MWE:
# create 3d array
a, b = [3;2;2], [4;3;2];
c = transpose(cat(a,b, dims = 2));
d, e = [1;2;3], [2;3;4];
f = transpose(cat(d,e, dims = 2));
g = cat(c, f, dims = 3);
g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3 2 2
4 3 2
[:, :, 2] =
1 2 3
2 3 4
findall.(g[end,:,1] >= g[end-1,:,1])
并使用索引来重置 g[end,:,2] 的元素,这样我最终得到
g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3 2 2
4 3 2
[:, :, 2] =
1 2 3
0 0 4
谢谢。Ĵ
解决方案
下面的代码给出了您要求的答案。你只是.
在错误的地方。您想>
逐个元素地比较操作,然后应用于findall
整个结果数组(而不是逐个元素)。
julia> g[end, findall(g[end,:,1] .> g[end-1,:,1]), 2] .= 0
2-element view(::Array{Int64,3}, 2, [1, 2], 2) with eltype Int64:
0
0
julia> g
2×3×2 Array{Int64,3}:
[:, :, 1] =
3 2 2
4 3 2
[:, :, 2] =
1 2 3
0 0 4
但是,我不会尝试将您的所有数据编译成这样的一个大数组。使用三个单独的一维数组变量比在一个变量中使用三个维度更容易。再次使用上面的变量:
julia> e[b .> a] .= 0
2-element view(::Array{Int64,1}, [1, 2]) with eltype Int64:
0
0
julia> e
3-element Array{Int64,1}:
0
0
4
推荐阅读
- for-loop - 开始一个 for 循环
- r - 使用 ggmap 包将地理编码转换为文本地址时出错
- c# - IdentityServer4 - 卡在连接/授权/回调?client_id=
- rest - 在 CouchDB 上进行预检的 CORS 请求
- kendo-ui - 延迟剑道验证直到提交表格
- python - 以下代码中的“as”关键字在做什么?
- css - 固定位置在 Chrome 移动设备上导致滚动时出现问题
- java - 使用一个类的多个限制器将数据存储在 firebase
- java - 如何从低安卓版本的安卓设备连接到Php服务器
- excel - 有没有办法从网络位置导入 Excel 模块 (VBA)?