NumPy中的数据转换

0 投票
1 回答
2885 浏览
提问于 2025-04-16 16:50
  • 输入的数据是一些一维的numpy数组列表,比如说 x[0] = [ array([1.0,1.0,1.0]), array([2.0,2.0,2.0]), ...]
  • len(x) 大约有几千行,而 len(x[n]) 是固定的数字(列数),但每次运行可能会变化(所以我不想把列数写死)。
  • 函数 f(x[n][col]) 会把每个 array 转换成一个单一的数字。
  • 我想要的结果是一个转换后的列的列表。

这些列表是用来绘图的,所以它们可以是numpy的数据结构。这里有一些代码来设置测试数据和假想的转换:

import numpy

# create test data set
def datagen(number):
    return numpy.array([number,number,number])

x=[]
for rows in range(20):
    dataline = [ datagen(n) for n in range(5)]
    x.append(dataline)

#define transformation of array to single number
def f(in_array):
    return in_array.sum()

我想要的结果——以numpy和python的方式得到:

[ array([0,0,0,...0]), array([3,3,3,....,3]), array([6,6,6,...,6]), ..etc]

在这个例子中,每个数组有20个元素(对应每行数据),而列表中有5个数组(对应每列)。

这是我目前的解决方案:

trans = []
for dataline in x:
    trans.append([f(a) for a in dataline])

trans = numpy.array(trans)
answer = [ trans[:,col] for col in range(len(x[0])) ]

还不错,但我觉得有点复杂,感觉可以做得更好。???

在实际情况中,f(a) = numpy.sqrt(numpy.vdot(a,a))

1 个回答

1

这样怎么样:

numpy.tile(numpy.arange(1,12).reshape(11,1),20)

撰写回答