数组上的Numpy迭代器无法按预期工作

时间:2015-01-19 09:58:40

标签: python numpy iterator

我想声明一个对象数组,然后在其中包含数组。我可以这样做:

import numpy as np    
v = np.empty([2,2], dtype=object)
for i in range(len(v.flat)):
  v.flat[i] = np.ones([3])

但是由于Numpy有迭代器,我想使用它们:

v = np.empty([2,2], dtype=object)
for i in np.nditer(v, flags=['refs_ok'],op_flags=['readwrite']):
  i[...] = np.ones([3])

,消息是:

ValueError: could not broadcast input array from shape (3) into shape()

有人可以解释我如何正确地做到这一点吗?

TIA

2 个答案:

答案 0 :(得分:3)

这是我喜欢的解决方案:

  

老实说,我不确定这是否更有意义(我会说   可能有道理)。但您可以根据需要使用i[()] = ...   无论如何,项目分配不是视图基于/切片分配。

     

哦,小心nditer和物体我忘记了什么陷阱   是的,但我很确定缓冲区有陷阱   参考计数。

来自github的seberg

答案 1 :(得分:0)

我不知道它是否正是您正在寻找的,但是使用numpy迭代器获得相同的结果,以下代码可能是您的答案。

v = np.empty([2,2], dtype=object)

for idRow,idCol in np.ndindex(np.shape(v)):
    v[idRow,idCol] = np.ones(3)
    print idRow, idCol

如果它不符合您的要求,请根据您的要求提供更多规范