Использовать вход массива для функции numpy mgrid вместо цикла for для массива - PullRequest
0 голосов
/ 31 мая 2018

Приведенный ниже код создает список массивов координат из DataFrame с использованием функции numpy mgrid - есть ли способ сделать это без цикла for и использовать массивы numpy?

import pandas as pd
import numpy as np

x = np.random.randint(0,100,10)
y = np.random.randint(0,100,10)
z = np.random.randint(0,100,10)

x2 = x+10
y2 = y+10
z2 = z+10

num_x = np.random.randint(1,11,10)
num_y = np.random.randint(1,11,10)
data = [x,y,z,x2,y2,z2,num_x,num_y]

df = pd.DataFrame(data).T
df.columns = ['x','y','z','x2','y2','z2','num_x','num_y']

out=[]

for i in range(len(df)):
    grid = np.mgrid[df['x'].values[i]:df['x2'].values[i]:df['num_x'].values[i]*1j,df['y'].values[i]:df['y2'].values[i]:df['num_y'].values[i]*1j,df['z'].values[i]:df['z2'].values[i]:1j]
    grid2 = np.array([grid[0].flatten(),grid[1].flatten(),grid[2].flatten()]).T
    out.append(grid2)

Я ценю, что цикл for может быть необходим, но хотел проверить, прежде чем сдаться.Причина спрашивать;пара статей 1 , 2 предполагают, что, избегая циклов for, понимание списка и функция map в пользу numpy-функций, особенно когда данные похожи на массив, могут значительно сократить время выполнения,

Я пытался передать данные x в виде массива в mgrid, но он выдает TypeError;

np.mgrid[df['x'].values:df['x2'].values:df['num_x'].values*1j]

TypeError: only length-1 arrays can be converted to Python scalars

Соответствующий вопрос предполагает, что эта ошибка вызвана тем, что в функцию numpy входят непустые данные, но все имеет тип numpy.ndarray.Означает ли это, что mgrid не может принимать массив?Спасибо.

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