Приведенный ниже код создает список массивов координат из 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 не может принимать массив?Спасибо.