@Timebird

Как умножить каждый элемент массива с шагом n?

Здравствуйте.
Имеется массив из единиц (array1). Необходимо первый элемент этого массива умножить на корень из 2, второй -- на 2, третий -- на 2 корня из двух, четвертый -- на 4 и т. д.
Как это сделать? Никак не пойму. Cам пробовал так, не работает:

for i in range(len(array1)):
	array1[i] *= sqrt(2)
	i += 1
print(amplitudes_array)
  • Вопрос задан
  • 2300 просмотров
Решения вопроса 5
AnnTHony
@AnnTHony
Интроверт
import math

def getAmplitudesArray(array):
	amplitudesArray = []
	multiplier = 2
	for item in array:
		amplitudesArray.append(float(item * math.sqrt(multiplier)))
		multiplier *= 2
	return amplitudesArray

array = [1] * 10
print(getAmplitudesArray(array))

>>> [1.4142135623730951,
        2.0,
        2.8284271247461903,
        4.0, 5.656854249492381,
        8.0, 11.313708498984761,
        16.0,
        22.627416997969522,
        32.0]
Ответ написан
Avernial
@Avernial
Разрабатываю научное ПО на языке Python.
from math import sqrt

array = [1] * 10

for i in range(len(array)):
    array[i] *= sqrt(2) ** (i + 1)

print(array)


Если используются массивы из numpy, то необходимо проверить их тип. Если dtype целочисленный, то у вас всегда будет получаться целое число.

import numpy as np

array = np.ones(10, dtype='int32')

for i in range(len(array)):
    array[i] *= np.sqrt(2) ** (i + 1)

print(array)


Чтобы избежать этого, либо делаете новый массив, либо этот конвертируете в тип float, либо изначально создаете массив типа float.

import numpy as np

array = np.ones(10, dtype='f4')

for i in range(len(array)):
    array[i] *= np.sqrt(2) ** (i + 1)

print(array)
Ответ написан
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
>>> arr = [1 for x in range(10)]
>>> arr
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> from math import sqrt
>>> res = map(lambda x,y: x*y, arr, [sqrt(2)**(a+1) for a in range(len(arr))])
>>> res
[1.4142135623730951, 2.0000000000000004, 2.8284271247461907, 4.000000000000001, 5.656854249492382, 8.000000000000004, 11.313708498984766, 16.000000000000007, 22.627416997969533, 32.00000000000002]
Ответ написан
@abcd0x00
>>> def gen():
...     a, b = 2 ** 0.5, 2
...     while True:
...         yield a
...         yield b
...         a *= 2
...         b *= 2
... 
>>> lst = [1] * 10
>>> out = [i * j for i, j in zip(lst, gen())]
>>> out
[1.4142135623730951, 2, 2.8284271247461903, 4, 5.656854249492381, 8, 11.313708498984761, 16, 22.627416997969522, 32]
>>>
Ответ написан
@Kevin1
arr = [1 for x in range(10)]
print arr
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
from math import sqrt
map(lambda(x,y): y * (sqrt(2) ** (x + 1)), enumerate(arr))
[1.4142135623730951, 2.0000000000000004, 2.8284271247461907, 4.000000000000001, 5.656854249492382, 8.000000000000004, 11.313708498984766, 16.000000000000007, 22.627416997969533, 32.00000000000002]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alex_ak1
Завести переменную. В начале она равна корень из два, потом на каждой итерации умножать ее на корень.
Ответ написан
ptitca_zu
@ptitca_zu
Programmer. Reader. Introvert
from math import sqrt
multiplier = sqrt(2)
for i in range(len(my_array)):
  my_array[i] *= multiplier
  multiplier *= sqrt(2)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы