#python #numpy
Вопрос:
Я пытаюсь разработать цикл for, чтобы мне не приходилось выполнять команду для каждого значения в массиве B. Мне нужен вывод в одном массиве. Как я могу сделать это здесь, на Python, для приведенного ниже кода?
C=[ 0, 0, 2, 1, 1, 8, 3, 6, 6, 7, 11, 8, 10, 23,22, 12, 15, 34, 16, 9, 11, 6, 0, 0]
B= np.array([500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500,5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000,9500, 10000, 10500, 11000, 11500, 12000])
C=[ 0, 0, 2, 1, 1, 8, 3, 6, 6, 7, 11, 8, 10, 23,22, 12, 15, 34, 16, 9, 11, 6, 0, 0]
B= np.array([500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500,5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000,9500, 10000, 10500, 11000, 11500, 12000])
EU=np.array(C)*np.array(B)
ENU_1 =np.where(B < 500, 0, (B-500)*C)
ENU_2 =np.where(B < 1000, 0, (B-1000)*C)
Комментарии:
1. При всем уважении, должно быть, уже существуют тысячи онлайн-ресурсов, в которых объясняются основы Python… См., например: вики. python.org/moin/ForLoop .
2. Спасибо, что ответили.
Ответ №1:
Создайте как B, так и C в виде массивов Numpy:
C = np.array([ 0, 0, 2, 1, 1, 8, 3, 6, 6, 7, 11, 8, 10, 23, 22, 12, 15, 34, 16,
9, 11, 6, 0, 0])
B = np.array([500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500,
6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000, 10500, 11000, 11500,
12000])
Затем вычислите EU так же, как умножение обоих исходных массивов, без какого-либо цикла:
EU = C * B
И остальная часть вашего кода (для вычисления ENU_1 и ENU_2) в порядке.
Но вы написали, что хотите получить вывод в одном массиве, и это неясно. Вы хотите объединить 3 массива, вычисленных до сих пор?
Если это так, запустите, например:
result = np.concatenate((EU, ENU_1, ENU_2))
Обратите внимание на двойные скобки, потому что:
- внешние скобки являются «контейнером» для параметров,
- внутренние скобки (с тем, что внутри) создают кортеж — первый (и единственный) параметр этой функции — последовательность массивов для объединения.