迭代numpy数组列表

时间:2014-07-16 12:10:22

标签: python arrays numpy

我有一个多维数组列表,需要访问每个数组并对它们进行操作。 模拟数据:

list_of_arrays = map(lambda x: x*np.random.rand(2,2), range(4))
list_of_arrays
[array([[ 0.,  0.],[ 0.,  0.]]), array([[ 0.39881669,  0.65894242],[ 0.10857551,   0.53317832]]), array([[ 1.39833735,  0.1097232 ],[ 1.89622798,  1.79167888]]), array([[ 1.98242087,  0.3287465 ],[ 1.2449321 ,  2.27102359]])]

我的问题是:

1-我怎么能遍历list_of_arrays,所以每次迭代都返回每个单独的数组?
例如迭代1返回list_of_arrays[0] ...最后一次迭代返回list_of_arrays[-1]

2-如何将每次迭代的结果用作另一个函数的输入?

我对Python很新。我的第一个想法是在for循环中定义函数,但我不清楚如何实现它:

for i in list_of_array:
    def do_something():

我想知道是否有人为此提供了一个很好的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以在其他地方定义函数,然后在循环中调用它。您没有在循环中反复定义函数。

def do_something(np_array):
    # work on the array here

for i in list_of_array:
    do_something(i)

作为一个工作示例,我们只需说出sum

上的array函数即可
def total(np_array):
    return sum(np_array)

现在我可以在for循环

中调用它
for i in list_of_arrays:
    print total(i)

输出

[ 0.  0.]
[ 1.13075762  0.87658186]
[ 2.34610724  0.77485066]
[ 1.08704527  2.59122417]

答案 1 :(得分:1)

您可以通过for循环访问每个数组,然后可以执行任何您想要的操作

  

实施例

使用内置功能

import numpy as np
list_of_arrays = map(lambda x: x*np.random.rand(2,2), range(4))
for i in list_of_arrays:
    print sum(i)

使用用户定义的函数

import numpy as np
def foo(i):
    #Do something here 

list_of_arrays = map(lambda x: x*np.random.rand(2,2), range(4))
for i in list_of_arrays:
    foo(i)

绘制数据进行分析

import numpy as np
import matplotlib.pyplot as plt
list_of_arrays = map(lambda x: x*np.random.rand(2,100), range(4))
fig = plt.figure(figsize=(10,12))
j=1
for i in list_of_arrays:
    plt.subplot(2,2,j)
    j=j+1
    plt.scatter(i[0],i[1])
    plt.draw()
plt.show()

会给你这个 Row comparison in 2*100 matrix