利用numpy mgrid函数的数组输入而不是for-loop over array

时间:2018-05-31 13:48:24

标签: python pandas numpy

下面的代码使用numpy mgrid函数从DataFrame创建一个坐标数组列表 - 有没有一种方法可以在没有for-loop和利用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循环可能是必要的,但想在放弃前检查。要求的理由;一些文章12建议通过避免for循环,列表理解和映射函数支持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

A related question表明此错误是由进入numpy函数的非numpy数据引起的,但所有内容都是numpy.ndarray类型。这是否意味着mgrid不能接受数组输入?感谢。

0 个答案:

没有答案