2016-03-24 5 views
0

Я написал функцию в F #, которая использует KMeans (http://accord-framework.net/docs/html/T_Accord_MachineLearning_KMeans.htm).В F # в чем разница между float [,] и float [] [] и как мне инициализировать float [] []?

Функция, называемая вычислением, требует float [] [], но я никогда не видел этого в F #. только float [,].

Пример кода приведен ниже.

let ConverterForCluster = 

создать массив из нуля 50 х 50. Это будет населен, как только я интерфейс это с существующим приложением, которое возвращает число с плавающей точкой [,], на данный момент я пытаюсь попасть написать Конвертер из [,] на [] []

Мой расстояние массив объявлен как

let mutable Distance = Array2D.zeroCreate 50 50 

KMeans представляет собой метод из библиотеки Accord.NET (ссылка в верхней части).

let km = KMeans(5) 

Я создаю новую переменную dm, так что функция Compute of km (ниже) может ее принять. Однако использование Unchecked.defaultof создает нулевой массив, который является ошибкой

let dm : float[][] = Unchecked.defaultof<float[][]> 

    for i = 0 to 49 do 
     for j = 0 to 49 do 

Я полагаю, что это преобразование из поплавка [,] плавать [] [] это хорошо, но я еще не инициализируюсь дм, так что я могу» т подтверждают, что 100%

dm.[i].[j] <- Convert.ToDouble Distance.[i, j] 

Это функция, которая нуждается в поплавок [] [] и не будет принимать [,]

let label = km.Compute(dm) 

    label 

исключение:

System.NullReferenceException было необработанное сообщение: необработанное исключение типа «System.NullReferenceException» произошло в cluster.exe Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.

Эта ошибка на следующей строке

dm.[i].[j] <- Convert.ToDouble Distance.[i, j] 

потому дм равна нулю из-за линии ниже, как я не знаю, как она инициализируется

let dm : float[][] = Unchecked.defaultof<float[][]> 

Мой вопрос заключается в том инициализировать этот тип массива? И в чем разница?

Если я пропустил что-либо из этого, сообщите мне, или если это не имеет смысла. Благодарю.

+0

Короче 'поплавок [,]' является [многомерным массивом] (https://en.wikipedia.org/wiki/Array_data_structure#Multidimensional_arrays) и 'плавать [] []' является [Невыровненным массивом ] (https://en.wikipedia.org/wiki/Jagged_array). –

+0

T [] [] Является всего лишь массивом массивов, поскольку T [,] фактически является одномерным массивом. –

+0

Я голосую, чтобы закрыть как дубликат, потому что на оба вопроса отвечает другой вопрос. В чем разница в ответе, и как инициализировать ответ на ссылку F # WikiBooks.Вы можете пометить этот вопрос как дубликат, который мгновенно изменит его статус. :) –

ответ

-3
let dm : float[][] = [| for a in 0 .. 49 do yield [| 0.0 .. 49.0 |] |] 
+4

Хотя этот код может ответить на вопрос, было бы лучше включить некоторый _context_, объясняя _how_ он работает и _when_ используй это. Ответы только на код не полезны в долгосрочной перспективе. –

+0

попытайтесь расширить свой ответ;) –

+0

@FoggyFinder Okay –

Смежные вопросы