【问题标题】:numpy: iterate over nested arraynumpy:迭代嵌套数组
【发布时间】:2013-05-05 06:48:36
【问题描述】:

我正在尝试使用 np.nditer() 迭代嵌套 (numpy) 数组。

将嵌套的整数列表转换为嵌套的 numpy 数组。

from numpy import mean, array, nditer

nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]

np_array = []
for i in nested_list:
    a = array(nested_list)
np_array.append(a)

上述工作,屈服;

[array([[1,2,3],
       [2,3,4],
       [3,4,5],
       [4,5,6]])]

我想计算每个嵌套子列表的平均值...我已经尝试过了,但它不能正常工作。

np_mean = []
c = 0
for i in nditer(np_array):
    m = mean(i)
    np_mean_rep.append(m)
    c += 1
print np_mean_rep

...这有点扁平化嵌套数组,所以我不指向每个嵌套子列表,而是指向每个值。我将如何以某种方式使用 nditer 以使其起作用?任何指针将不胜感激!

【问题讨论】:

  • 嗯.. 好的。我刚刚搜索了 numpy 数组并找到了 nditer。但是,尝试此操作时: np_array = [] for i in nested_array: b = array(nested_list).mean(axis=1) print np_array.append(b) 我得到 None
  • 但是如果数组是嵌套的(如上),那么我应该指向每个子列表,对吧?然后计算每个的平均值并将其附加到 np_array 列表中? axis=1 指向什么?我是 python 和 numpy 的初学者。

标签: python-2.7 numpy iteration multidimensional-array


【解决方案1】:

[从 cmets 迁移而来]

我认为你让事情变得比他们需要的要困难得多。数组有一个.mean() 方法,您不必逐行构建对象。您可以一次完成所有操作。

>>> import numpy as np
>>> nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
>>> np.array(nested_list)
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
>>> np.array(nested_list).mean(axis=1)
array([ 2.,  3.,  4.,  5.])
>>> np.array(nested_list).mean(axis=0)
array([ 2.5,  3.5,  4.5])

axis 参数指定我们要对数组的哪个维度取平均值。

通常——尽管并非总是如此——如果你发现自己用numpy 编写for 循环,那么你做错了什么。使用numpy 时的一个基本规则是尝试对所有内容进行矢量化(即根据可以一次对整个数组执行的操作编写代码),这意味着在快速 C 库中完成了艰苦的工作,而不是在缓慢的 Python 级别。

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2021-10-01
    • 2021-10-28
    • 2017-02-02
    • 2015-10-03
    相关资源
    最近更新 更多