Джулия: подсчет общего количества элементов в массиве массивов - PullRequest
4 голосов
/ 29 мая 2020

Есть ли в Julia единственная функция, которая даст вам общее количество элементов в массиве массивов (или «зубчатом массиве»)?

Вот что я имею в виду:

my_array_of_arrays = [ [1, 5], [6], [10, 10, 11] ] 

Я ищу такую ​​функцию, что desired_function(my_array_of_arrays) вернет 6

А если нет, то какой самый быстрый способ сделать это в Юлии?

Заранее спасибо !

Ответы [ 2 ]

4 голосов
/ 29 мая 2020

Один из способов сделать это без дополнительных зависимостей - использовать sum:

julia> my_array_of_arrays = [ [1, 5], [6], [10, 10, 11] ] 
3-element Array{Array{Int64,1},1}:
 [1, 5]
 [6]
 [10, 10, 11]

julia> sum(length, my_array_of_arrays)
6

Однако, если вы хотите более интенсивно работать с рваными массивами, вам может быть лучше использовать специализированные пакеты, такие как ArraysOfArrays.jl.

3 голосов
/ 30 мая 2020

sum(length, x), предложенный @MattB, является более элегантным ответом, и он заслуживает быть здесь, чтобы другие могли его найти.

Тестирование:

julia> my_array_of_arrays = [ [1, 5], [6], [10, 10, 11] ]
3-element Array{Array{Int64,1},1}:
 [1, 5]
 [6]
 [10, 10, 11]

julia> sum(length, my_array_of_arrays)
6

Обратите внимание, что производительность обоих методов mapreduce(length, +, x) и sum(length, x) идентичны, поскольку оба не материализуют данные.

...