数组的形状
数组的属性
使用numpy生成的数组有以下属性(方法)
Shape:返回数组的维度元组,也可用于调整数组的维度;
import numpy as np
t1 = np.arange(12)
print(t1)
print(t1.shape)
print("*****************************")
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
print(t2.shape)
print("*****************************")
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
print(t3.shape)
print("*****************************")
t4 = t1.reshape((3,4))
print(t4)
print("*****************************")
t5 = np.arange(24).reshape(2,3,4)
print(t5)
print(t5.reshape(4,6))
print(t5)
out[1]:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
(12,)
*****************************
[[1 2 3]
[4 5 6]]
(2, 3)
*****************************
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
(2, 2, 3)
*****************************
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
*****************************
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
在调用shape方法的时候,我们能找到一个规律,“是几维数组,输出就是几个数字组成”,一维数组时,输出有多少元素,二维数组时,输出(行,列)的数组,三维时,输出(模块,每个模块中的行,每个模块中的列)。
Reshape:也可用来调整数组的维度,但该方法并不会改变原来数组的维度,只会返回一个改变维度后的数组;
由上面的代码可以发现,reshape不会改变原有的数据,只会改变当前行所执行的语句。
语句中-1代表缺省值,
reshape(-1,1)表示只固定列为1列,行不知道,自动确定
同理,.reshape(2,-1)表示只确定行,列系统自动确定。
在reshape中也需要注意维度问题,还是和shape中的规律一样,括号中几个数字就代表转化为几维数组。
注意:reshape(1,2)和reshape((1,2))输出的值是一样的,但是建议使用第二种(笔者测试,不知道是否是有其他原因,希望看到并且知道的能指出错误)。
t6 = np.arange(24).reshape(4,6)
print(t6)
t7 = t6.shape[0]
print(t7)
out[2]:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
4
shape[num]:此处的num={0,1},取0时代表行,取1时代表列(python中很多方法都有取行列,由0和1表示,但是不同的方法或函数0和1分别代表的不一定是行和列,也可能是列和行)。
numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:
ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维
另外,reshape(-1)也可以“拉平”多维数组
Itemsize:返回数组中每一项所占的字节大小(int8为一字节)
ndim: 返回矩阵的秩
size:返回矩阵元素的个数
dtype:返回矩阵元素的数据类型