Умножение массива на число - PullRequest
0 голосов
/ 18 марта 2020

Я написал в Clojure функцию, которая будет принимать строку 2-мерного массива, а затем умножает значения в ней на одно значение. У меня есть индекс для получения указанной строки c и значение для умножения строки в другом массиве.

Функция вернет массив, который теперь получил значения, умноженные на одно значение.

Вот код:

(def twod-array [[3.1 0.0023  0.35]
                [0.21 0.00353 8.13]])

(def iandv [1 3.1])

(defn array-multiply [iandv twod-array]
(
      let [array-row (nth twod-array (nth iandv 0))]
      (map * [array-row] [(nth iandv 1)])
)

Let получает строку массива, а затем возвращает строку со значениями внутри, умноженными на значение массива «index and value».

Это самое близкое, что я получил, используя примеры с веб-сайтом clojure.do c, и я получаю ClassCastException следующего:

ClassCastException clojure.lang.PersistentVector cannot be cast to java.lang.Number  clojure.lang.Numbers.multiply (Numbers.java:148)

Я был глядя на вектор карты и другие функции карты, но я не смог найти хорошее решение.

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

больше clojuri sh способ может выглядеть примерно так:

(defn array-multiply [[row mul] twod-array]
  (update twod-array row #(mapv (partial * mul) %)))

user> (array-multiply iandv twod-array)
;;=> [[3.1 0.0023 0.35] [0.651 0.010943000000000001 25.203000000000003]]
0 голосов
/ 18 марта 2020

Ваш код несколько сложен для чтения, но в основном вы пытаетесь умножить число и вектор, что не работает.

(defn array-multiply [iandv twod-array]
  (let [array-row (nth twod-array (nth iandv 0))]
    (map * array-row [(nth iandv 1)])))

работает, поскольку array-row уже является вектором .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...