Мощность матрицы в R

MultipartFile, по умолчанию, уже сохранен на вашем сервере в качестве файла при загрузке пользователя. С этого момента вы можете делать все, что хотите, с этим файлом. Существует метод, который перемещает этот временный файл в любой желаемый пункт назначения. http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartFile.html#transferTo (java.io.File)

Но MultipartFile - это просто API, вы можете реализовать любой другой файл MultipartResolver http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartResolver.html

Этот API принимает входной поток, и вы можете делать с ним все, что хотите. Реализация по умолчанию (обычно commons-multipart) сохраняет файл temp в качестве файла.

Но другая проблема остается здесь - если S3 API принимает файл как параметр - вы ничего не можете с этим сделать - вам нужно реальный файл. Если вы хотите вообще не создавать файлы - создайте свой собственный S3 API.

30
задан George Dontas 18 July 2010 в 08:22
поделиться

4 ответа

Я исправил эту ошибку в исходниках R-forge (пакета "expm"), svn rev. 53. -> Expm R-forge page По какой-то причине на веб-странице все еще отображается версия 52, поэтому следующее может еще не решить вашу проблему (но должно в течение 24 часов):

 install.packages("expm", repos="http://R-Forge.R-project.org")

В противном случае получите версию svn напрямую и установите себя:

 svn checkout svn://svn.r-forge.r-project.org/svnroot/expm

Спасибо «gd047», который предупредил меня о проблеме по электронной почте. Обратите внимание, что R-forge также имеет собственные средства отслеживания ошибок.
Мартинт

30
ответ дан 28 November 2019 в 00:08
поделиться

Это неправильный ответ, но он может быть хорошим местом для обсуждения и понимания внутренней работы R. Этот вид ошибок уже подкрался раньше в другом пакете I использовал.

Во-первых, обратите внимание, что простое присвоение матрицы сначала новой переменной не помогает:

> A <- B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r1 <- A %^% 5
> A
     [,1] [,2] [,3]
[1,]  691 1926  312
[2,] 2331 6502 1056
[3,] 1116 3108  505
> B
     [,1] [,2] [,3]
[1,]  691 1926  312
[2,] 2331 6502 1056
[3,] 1116 3108  505

Я предполагаю, что R пытается быть умным, передавая по ссылке вместо значений. Чтобы заставить это работать, вам нужно что-то сделать, чтобы отличить A от B:

`%m%` <- function(x, k) {
    tmp <- x*1
    res <- tmp%^%k
    res
}
> B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r2 <- B %m% 5
> B
     [,1] [,2] [,3]
[1,]    1    2    1
[2,]    3    8    1
[3,]    0    4    1

Каков явный способ сделать это?

Наконец, в коде C для пакета есть следующий комментарий:

  • NB: x будет изменен! При необходимости вызывающий должен сделать копию

Но я не понимаю, почему R позволяет коду C / Fortran иметь побочные эффекты в глобальной среде.

8
ответ дан 28 November 2019 в 00:08
поделиться

Хотя исходный код не отображается в пакете, поскольку он упакован в файл .dll , я считаю, что в пакете используется алгоритм алгоритм быстрого возведения в степень , который вы можете изучить, взяв вместо этого функцию с именем matpowfast .

Вам нужны две переменные:

  1. result , чтобы сохранить результат,
  2. mat в качестве промежуточной переменной.

Чтобы вычислить A ^ 6 , поскольку 6 = 110 (двоичная запись), в итоге result = A ^ 6 и mat = A ^ 4 . То же самое для A ^ 5 .

Вы можете легко проверить, соответствует ли mat = A ^ 8 , когда вы попытаетесь вычислить A ^ n для любого 8 . Если да, то у вас есть объяснение.

Пакетная функция использует начальную переменную A в качестве промежуточной переменной mat .

2
ответ дан 28 November 2019 в 00:08
поделиться

A ^ 5 = (A ^ 4) * A

Я полагаю, что библиотека изменяет исходную переменную A, так что каждый шаг включает в себя умножение результата до тех пор, пока с исходной матрицей A. Результат, который вы получите, кажется прекрасным, просто назначьте его новой переменной.

0
ответ дан 28 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: