Как вы постепенно увеличиваете значения в массиве numpy? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть массив, заполненный тем же значением, однако я хочу, чтобы это значение постепенно уменьшалось на значение 0,025 с каждой строкой. В настоящее время это выглядит так:

import numpy as np

vp_ref = 30
surf_lay = np.ones(([1000,10000]), dtype=np.float32);
gvp_ref = vp_ref * surf_lay

Таким образом, массив заполнен 30 с. Я хочу, чтобы в первом ряду было 30, в следующем ряду - до 29,975, и я продолжаю идти до самого дна. Как бы я это сделал?

Ответы [ 3 ]

1 голос
/ 30 апреля 2020

Вы можете использовать np.linspace для создания линейно распределенных данных, а затем np.tile для создания 2D-массива:

n = 1000
tmp = np.linspace(30, 30 - (n-1)*0.025, n)
result = np.tile(tmp[:, None], (1, 10_000))
1 голос
/ 30 апреля 2020

Здесь, в этом коде альфа равен 0,025

import numpy as np
vp_ref = 30
surf_lay = np.ones(([1000,10000]), dtype=np.float32);
gvp_ref = vp_ref * surf_lay

alpha = 0.025
substration_array = np.array([[alpha*i]*gvp_ref.shape[1] for i in range(gvp_ref.shape[0])])

gvp_ref.shape
substration_array.shape

output = np.subtract(gvp_ref, substration_array)
1 голос
/ 30 апреля 2020

Вот решение:

  1. Определите step_range, чтобы получить все значения, начиная с 0, добавив step до конца размера вашей матрицы.
  2. Вычтите это!
step = 0.025
step_range = np.arange(0, gvp_ref.shape[0] * step, step).reshape(-1, 1)
print(gvp_ref - step_range)

Вывод:

array([[30.   , 30.   , 30.   , ..., 30.   , 30.   , 30.   ],
       [29.975, 29.975, 29.975, ..., 29.975, 29.975, 29.975],
       [29.95 , 29.95 , 29.95 , ..., 29.95 , 29.95 , 29.95 ],
       ...,
       [ 5.075,  5.075,  5.075, ...,  5.075,  5.075,  5.075],
       [ 5.05 ,  5.05 ,  5.05 , ...,  5.05 ,  5.05 ,  5.05 ],
       [ 5.025,  5.025,  5.025, ...,  5.025,  5.025,  5.025]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...