从遍历二维多维数组到遍历多维数组
问题:
在学习sklearn pipeline的一个案例时,
其中有一段代码:
n_samples = 200
size = 40
X = np.random.randn(n_samples, size**2)# X.shape:(n_samples, size**2)(200, 1600)
for x in X: # smooth data
x[:] = ndimage.gaussian_filter(x.reshape(size, size), sigma=1.0).ravel()
X = np.random.randn(n_samples, size**2)
使用 NumPy 库生成的随机数组。它会生成一个形状为 (n_samples, size**2)
即(200,1600) 的 二维数组,其中的元素都是从标准正态分布中随机抽取的。
那么,for x in X:
是按什么遍历的呢?
测试一下
发现默认情况下是按行遍历的
那么如何案列遍历?X是二维数组,转置一下应该就可以了,测试一下
如果要遍历一个多维数组中的每个单个数据点,就可以使用嵌套的循环
for x in X:
for value in x:
...
numpy.nditer()
查了一下资料,也可以使用numpy的numpy.nditer()函数,无论数组是多少维度的,它以展开的方式迭代多维数组X中的每个元素。
import numpy as np
for value in np.nditer(X):
...
多维数组
我们生成一个三维数组来测试一下
X = np.random.randn(10, 20, 30)
for x in X:
print(x.shape)
发现他默认按照第一个维度(最外层维度)遍历。X的维度是(10, 20, 30)使用 for x in X
进行迭代时,x 取值为 X 的第i个切片,即 X[i :, :]
,得到的是二维组,那么就可以同前面遍历二维组数的方法嵌套进行遍历。
for x in X:
for y in x:
for value in y:
...