Установка гамма распределению с (Python) Scipy

Спасибо @pavan

Любой клиент, которому нужно использовать SSE-C, должен иметь возможность отправки заголовков ниже.

enter image description here

При использовании предварительно назначенного URL-адреса для извлечения существующего объекта или извлечения только метаданных объекта нам необходимо предоставить все заголовки шифрования в ваше клиентское приложение.

  • Для шифрования на стороне сервера, управляемого S3 или KMS, мы можем создать предварительно заданный URL-адрес и напрямую вставить его в браузер или проигрыватель.

  • Однако это не относится к объектам SSE-C, поскольку в дополнение к предварительно назначенному URL-адресу также необходимо включить заголовки HTTP, специфичные для объектов SSE-C. Следовательно, вы можете использовать предварительно назначенный URL-адрес для объектов SSE-C только программно.

Загрузка:

Я выбрал управляемые ключи S3 вместо предоставленного клиентом клиентского ключа.

        FileInputStream fin = new FileInputStream(uploadFileName);

        byte fileContent[] = new byte[(int) uploadFileName.length()];

        // Reads up to certain bytes of data from this input stream into an array of
        // bytes.
        fin.read(fileContent);
        // create string from byte array

        // Specify server-side encryption.
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(fileContent.length);
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName,
                new ByteArrayInputStream(fileContent), objectMetadata);

        // Upload the object and check its encryption status.
        PutObjectResult putResult = s3Client.putObject(putRequest);
        System.out.println("Object \"" + keyName + "\" uploaded with SSE.");

GET Предназначенный URL:

    java.util.Date expiration = new java.util.Date();
    long expTimeMillis = expiration.getTime();
    expTimeMillis += 1000 * 60 * 60;
    expiration.setTime(expTimeMillis);

    System.out.println("Generating pre-signed URL.");
    GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, keyName)
            .withMethod(HttpMethod.GET).withExpiration(expiration);

    URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
    System.out.println("Pre-Signed URL: " + url.toURI());

Ссылка: https://docs.aws.amazon.com/AmazonS3/latest/dev /ServerSideEncryptionCustomerKeys.html

24
задан Tetsujin no Oni 18 June 2014 в 15:59
поделиться

2 ответа

Я был недоволен функцией ss.gamma.rvs, так как она может генерировать отрицательные числа, чего, как предполагается, не имеет гамма-распределение. Таким образом, я подобрал выборку по ожидаемому значению = среднее (данные) и дисперсии = переменная (данные) (подробности см. В Википедии) и написал функцию, которая может давать случайные выборки гамма-распределения без scipy (который мне трудно установить правильно, на обозначении):

import random
import numpy

data = [6176, 11046, 670, 6146, 7945, 6864, 767, 7623, 7212, 9040, 3213, 6302, 10044, 10195, 9386, 7230, 4602, 6282, 8619, 7903, 6318, 13294, 6990, 5515, 9157]

# Fit gamma distribution through mean and average
mean_of_distribution = numpy.mean(data)
variance_of_distribution = numpy.var(data)

def gamma_random_sample(mean, variance, size):
    """Yields a list of random numbers following a gamma distribution defined by mean and variance"""
    g_alpha = mean*mean/variance
    g_beta = mean/variance
    for i in range(size):
        yield random.gammavariate(g_alpha,1/g_beta)

# force integer values to get integer sample
grs = [int(i) for i in gamma_random_sample(mean_of_distribution,variance_of_distribution,len(data))]

print("Original data: ", sorted(data))
print("Random sample: ", sorted(grs))

# Original data: [670, 767, 3213, 4602, 5515, 6146, 6176, 6282, 6302, 6318, 6864, 6990, 7212, 7230, 7623, 7903, 7945, 8619, 9040, 9157, 9386, 10044, 10195, 11046, 13294]
# Random sample:  [1646, 2237, 3178, 3227, 3649, 4049, 4171, 5071, 5118, 5139, 5456, 6139, 6468, 6726, 6944, 7050, 7135, 7588, 7597, 7971, 10269, 10563, 12283, 12339, 13066]
4
ответ дан 28 November 2019 в 22:53
поделиться

Сгенерируйте некоторые гамма-данные:

import scipy.stats as stats    
alpha = 5
loc = 100.5
beta = 22
data = stats.gamma.rvs(alpha, loc=loc, scale=beta, size=10000)    
print(data)
# [ 202.36035683  297.23906376  249.53831795 ...,  271.85204096  180.75026301
#   364.60240242]

Здесь мы подгоняем данные к гамма-распределению:

fit_alpha, fit_loc, fit_beta=stats.gamma.fit(data)
print(fit_alpha, fit_loc, fit_beta)
# (5.0833692504230008, 100.08697963283467, 21.739518937816108)

print(alpha, loc, beta)
# (5, 100.5, 22)
52
ответ дан 28 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

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