Не могли бы вы мне помочь? у меня такая матрица
> rout
4×5 Array{Int64,2}:
0 1 4 0 2
0 3 0 1 2
0 2 4 0 3
0 1 4 2 3
каждая строка этой матрицы имеет несколько секций. например, первая строка состоит из двух секций. первый раздел включает 1,4, а второй раздел включает 2, а в последней строке есть один раздел 1,2,3,4. Я хочу получить матрицу, в которой количество секций в каждой строке является значением другой матрицы (nrout[i,j]
).
для матрицы перед rout
можно сделать это nrout
: (столбцы nrout
равны 1,2,3,4)
> nrout
4×4 Array{Int64,2}:
1 2 0 1
2 2 1 0
0 1 2 1
1 1 1 1
вместо 1 в rout
мест 1 (номер секции 1) в nrout
. вместо 4 помещает 1 (номер раздела 1) в nrout
. вместо 2 помещает 2 (номер раздела 2) в nrout
.
не могли бы вы помочь мне, как эту матрицу можно сделать в Джулии?
Спасибо. Узлы, появившиеся в rout {1,2,3,4}, составляют столбцы nrout соответственно.
Я бы использовал цикл для этой проблемы:
function getnrout(rout)
# assume we have at least one 0 in each row in column 1
nrout = zeros(Int, size(rout, 1), size(rout, 2) - 1)
for i in axes(rout, 1)
section = 0
for j in axes(rout, 2)
v = rout[i,j]
if v == 0
section += 1
else
nrout[i, v] = section
end
end
end
return nrout
end
Я очень благодарен. но когда код был запущен. У него была эта ошибка. Я использовал Int(axes(rout,1)
, чтобы решить эту проблему, но это не сработало. Ошибка MethodError: no method matching start(::AxisArrays.Axis{:row,Base.OneTo{Int64}})[0m Closest candidates are: start([91m::SimpleVector[39m) at essentials.jl:258 start([91m::Base.MethodList[39m) at reflection.jl:560 start([91m::ExponentialBackOff[39m) at error.jl:107
кроме того, using AxisArrays
используется, потому что оси не были известны. Это проблема?
Если у вас нет axes
, возможно, вы используете более старую версию Julia, чем Bogumił. Я думаю, что это было indices
раньше.
да. Теперь это сработало. подскажите пожалуйста какую версию юлии лучше поставить что бы в ней не было багов? Большое спасибо.
Я бы рекомендовал использовать Юлию 1.1. Конечно, лучше не использовать Julia 0.6 или более ранние версии, так как они не поддерживаются. вместо axes(rout, 2)
вы также можете написать 1:size(rout, 2)
- это то же самое в обычных случаях (если вы не используете матрицы с нестандартными осями).
Тег "прыжок" я убрал, так как это не конкретно про ПРЫЖОК (если не объясните, почему именно). Кроме того, мне непонятно, о чем вы спрашиваете; Можете ли вы объяснить немного больше, как другие строки
nrout
связаны сrout
? Тогда бы у нас было больше примеров.