Применение arange к массиву - PullRequest
       0

Применение arange к массиву

0 голосов
/ 15 ноября 2018

np.arange принимает три аргумента: начало, остановка и шаг.

Шаг, который я хочу, равен -0,3048. У меня также есть отдельные массивы для запуска и остановки.

Для начала у меня есть целый массив элементов:

array([5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.377, 5.000,
       5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.462, 3.285,
       5.000, 5.000, 4.150, 5.000, 5.000, 5.000, 5.000, 5.000, 4.118, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.674, 5.000, 5.000, 5.000, 5.000,
       5.000, 5.000, 4.655, 5.000, 5.000, 5.000, 4.573, 5.000, 5.000, 4.775, 4.909, 5.000, 5.000, 5.000, 3.874, 5.000, 5.000, 3.197, 5.000, 5.000,
       5.000, 5.000, 5.000, 4.829, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.372, 4.175, 5.000, 5.000, 5.000, 5.000,
       5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.793, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.993, 5.000, 5.000, 5.000, 5.000, 5.000,
       5.000, 4.898, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.294, 5.000])

Вот соответствующие значения stop :

array([1.927, -0.018, 0.214, 4.390, 0.162, 3.790, 4.891, -0.011, 4.623, 1.203, 4.270, 3.239, 4.569, 0.001, 3.942, 4.363, 3.135, 4.390, 3.176, 4.390,
       3.958, 3.992, 0.595, 4.458, 4.897, -0.009, -0.004, 0.004, 0.010, 4.987, 4.454, 3.167, 3.791, 4.213, 3.100, 4.312, 4.166, 3.942, 1.984, 2.077,
       4.810, 0.737, 0.490, 3.167, -0.010, 0.214, 4.313, 3.607, 2.509, 2.801, 3.034, 3.257, 0.013, 4.398, 0.013, 2.509, 4.157, 4.365, 4.902, 2.109,
       4.390, 3.176, 3.034, 4.096, 0.168, 3.205, 3.176, 1.927, 4.352, 2.509, 2.848, 4.749, 4.217, 3.017, 2.509, 4.204, 0.268, 1.662, 4.124, 0.136,
       2.509, 1.623, 4.791, 0.028, 2.969, 4.770, 4.799, 3.167, 2.970, 4.301, 0.883, 4.314, 0.182, -0.051, 2.493, 2.509, 4.131, 4.001, 4.952, 4.209,
       4.363, 4.632, 4.390, 3.172, 3.470, 0.174, 4.804, 2.247, 2.751, 4.352, 4.110, 2.969, 4.914, 2.142, 2.120, 4.936, 3.780, 3.942, 1.042, 4.229,
       2.267, 1.927, 1.213, 2.509, 4.464, 4.464, 0.595, 4.442, 2.751, 2.509, 3.339])

Мне нужно применить arange к каждому элементу.

Какой самый быстрый способ сделать это? Я знаю, что мог бы использовать цикл for, но я надеюсь, что решение будет полностью нативным (то есть векторизованным).

Спасибо. Пожалуйста, дайте мне знать, если что-то не понятно.

1 Ответ

0 голосов
/ 15 ноября 2018

Если вы хотите создать их на лету, вы можете использовать цикл for:

starts = np.array([5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.377, 5.000,
   5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.462, 3.285,
   5.000, 5.000, 4.150, 5.000, 5.000, 5.000, 5.000, 5.000, 4.118, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 3.674, 5.000, 5.000, 5.000, 5.000,
   5.000, 5.000, 4.655, 5.000, 5.000, 5.000, 4.573, 5.000, 5.000, 4.775, 4.909, 5.000, 5.000, 5.000, 3.874, 5.000, 5.000, 3.197, 5.000, 5.000,
   5.000, 5.000, 5.000, 4.829, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.372, 4.175, 5.000, 5.000, 5.000, 5.000,
   5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.793, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.993, 5.000, 5.000, 5.000, 5.000, 5.000,
   5.000, 4.898, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 5.000, 4.294, 5.000])

stops = np.array([1.927, -0.018, 0.214, 4.390, 0.162, 3.790, 4.891, -0.011, 4.623, 1.203, 4.270, 3.239, 4.569, 0.001, 3.942, 4.363, 3.135, 4.390, 3.176, 4.390,
   3.958, 3.992, 0.595, 4.458, 4.897, -0.009, -0.004, 0.004, 0.010, 4.987, 4.454, 3.167, 3.791, 4.213, 3.100, 4.312, 4.166, 3.942, 1.984, 2.077,
   4.810, 0.737, 0.490, 3.167, -0.010, 0.214, 4.313, 3.607, 2.509, 2.801, 3.034, 3.257, 0.013, 4.398, 0.013, 2.509, 4.157, 4.365, 4.902, 2.109,
   4.390, 3.176, 3.034, 4.096, 0.168, 3.205, 3.176, 1.927, 4.352, 2.509, 2.848, 4.749, 4.217, 3.017, 2.509, 4.204, 0.268, 1.662, 4.124, 0.136,
   2.509, 1.623, 4.791, 0.028, 2.969, 4.770, 4.799, 3.167, 2.970, 4.301, 0.883, 4.314, 0.182, -0.051, 2.493, 2.509, 4.131, 4.001, 4.952, 4.209,
   4.363, 4.632, 4.390, 3.172, 3.470, 0.174, 4.804, 2.247, 2.751, 4.352, 4.110, 2.969, 4.914, 2.142, 2.120, 4.936, 3.780, 3.942, 1.042, 4.229,
   2.267, 1.927, 1.213, 2.509, 4.464, 4.464, 0.595, 4.442, 2.751, 2.509, 3.339])

step = -0.3048
if len(starts)!=len(stops):
    raise IndexError("Shape of starts does not match shape of stops")

for i in range(len(starts)):
    myrange = np.arange(starts[i], stops[i], step)
    # do things

Становится немного любительницей:

pairs = list(zip(starts, stops))

for start, stop in pairs:
    myrange = np.arange(start, stop, step)

Я уверен, что есть более приятная numpy собственная реализация, но это может вывести вас из строя

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