引用类型的np.nditer返回类型

时间:2018-09-13 15:09:03

标签: python numpy matplotlib data-science

如何获取np.nditer的正确返回类型?我需要在此处遍历ax对象:

fig, ax = plt.subplots(figsize=(16,9), ncols=3, nrows=2)
for col, elem in zip(df.columns[:-1], np.nditer(ax, flags = ['refs_ok'])):
    sns.countplot(x="CLASS", hue=col, data=df, ax=elem)

我知道我可以使用ax数组的维度在这里进行迭代,但是我想知道是否可以进行这项工作。基本上,ax=elem在迭代中应该看起来像ax=ax[i][j]。但是事实证明它们有不同的类型:

print(type(elem))
print(type(ax[0][0]))

返回:

<class 'numpy.ndarray'>
<class 'matplotlib.axes._subplots.AxesSubplot'>

2 个答案:

答案 0 :(得分:2)

可能您想像

那样进行迭代
#include<iostream>
using namespace std;

class
{
public :
   int FullName;
   int RollNumber;
   in
{
public :
   int FullName;
   int RollNumber;
   int age;
   int marks;
}
voidt age;
   int marks;
};
void main()
{
   int n;
   cout << "How many Students record you want :\t ";
   cin >>n;     
   Data Student[n];
}

较短,总是使fig, ax = plt.subplots(figsize=(16,9), ncols=3, nrows=2) for col, elem in zip(df.columns[:-1], ax.flat): sns.countplot(x="CLASS", hue=col, data=df, ax=elem) 成为elem对象。

答案 1 :(得分:1)

使用这样的numpy函数的问题是它将立即将可迭代对象转换为np.ndarray对象。

因此,您的返回值将是此np.ndarray对象的一部分,请看以下示例

In [472]: list(np.nditer([[None, None], [None, None]], flags = ['refs_ok']))
Out[472]:
[(array(None, dtype=object), array(None, dtype=object)),
 (array(None, dtype=object), array(None, dtype=object))]

In [473]: list(np.nditer([[None, None], [None, None]], flags = ['refs_ok']))[0][0]
Out[473]: array(None, dtype=object)

如果要从0维numpy数组中获取原始项目,请使用.tolist()方法

您可能现在已经知道,由于您没有迭代数字类型,因此引入所有numpy的复杂性和开销是没有意义的,正确的方法是https://stackoverflow.com/a/52316861/4013571