其他
总结numpy中的ndarray,非常齐全
The following article is from Python 碎片 Author binn.wong
# coding=utf-8
import numpy as np
array_a = np.array([[1, 2, 3], [4, 5, 6]])
print(array_a)
print('ndarray的维度: ', array_a.ndim)
print('ndarray的形状: ', array_a.shape)
print('ndarray的元素数量: ', array_a.size)
print('ndarray中的数据类型: ', array_a.dtype)
print(type(array_a))
[[1 2 3]
[4 5 6]]
ndarray的维度: 2
ndarray的形状: (2, 3)
ndarray的元素数量: 6
ndarray中的数据类型: int32
<class 'numpy.ndarray'>
二、ndarray的维度和形状
array_b = np.array([1, 1, 1])
array_c = np.array([[2, 2, 2], [2, 2, 2]])
array_d = np.array([[[3, 3, 3], [3, 3, 3]], [[3, 3, 3], [3, 3, 3]]])
print(array_b, '\n{}'.format(array_c), '\n{}'.format(array_d))
print(array_b.shape, array_c.shape, array_d.shape)
[1 1 1]
[[2 2 2]
[2 2 2]]
[[[3 3 3]
[3 3 3]]
[[3 3 3]
[3 3 3]]]
(3,) (2, 3) (2, 2, 3)
array_b是一个一维数组,数组中有三个数据。array_c是一个二维数组,数组中有2*3个数据。array_d是一个三维数组,数组中有2*2*3个数据。所以它们的形状分别是(3,) 、(2, 3)和 (2, 2, 3)。用图形表示如下:
名称 | 描述 | 简写 |
---|---|---|
np.bool | 用一个字节存储的布尔类型(True或False),在数据分析中很常用。 | 'b' |
np.int8 | 一个字节大小,-128至127,不常用。 | 'i' |
np.int16 | 整数,-32768至32767,不常用。 | 'i2' |
np.int32 | 整数,-2^31至2^32-1,常用。 | 'i4' |
np.int64 | 整数,-2^63至2^63-1,常用,一般整数默认为np.int64或np.int32。 | 'i8' |
np.uint8 | 无符号整数,0至255,不常用。 | 'u' |
np.uint16 | 无符号整数,0至65535,不常用。 | 'u2' |
np.uint32 | 无符号整数,0至2^32-1,常用。 | 'u4' |
np.uint64 | 无符号整数,0至2^64-1,常用。 | 'u8' |
np.float16 | 16位半精度浮点数,正负号1位,指数5位,精度10位,不常用。 | 'f2' |
np.float32 | 32位单精度浮点数,正负号1位,指数8位,精度23位,不常用。 | 'f4' |
np.float64 | 64位双精度浮点数,正负号1位,指数11位,精度52位,常用。 | 'f8' |
np.complex64 | 复数,分别用两个32位浮点数表示实部和虚部,基本不会用。 | 'c8' |
np.complex128 | 复数,分别用两个64位浮点数表示实部和虚部,基本不会用。 | 'c16' |
np.object_ | python对象,常用。 | 'O' |
np.string_ | 字符串,常用。 | 'S' |
np.unicode_ | unicode类型,不常用。 | 'U' |
四、修改ndarray的形状和数据类型
array_e = np.array([[1, 2, 3], [4, 5, 6]])
print(array_e, array_e.shape)
array_e1 = array_e.reshape((3, 2))
print(array_e1, array_e1.shape)
array_e2 = array_e.T
print(array_e2, array_e2.shape)
[[1 2 3]
[4 5 6]] (2, 3)
[[1 2]
[3 4]
[5 6]] (3, 2)
[[1 4]
[2 5]
[3 6]] (3, 2)
array_f = np.array([[1, 2, 3], [4, 5, 6]])
print(array_f, array_f.dtype)
array_f1 = array_f.astype(np.int64)
print(array_f1, array_f1.dtype)
[[1 2 3]
[4 5 6]] int32
[[1 2 3]
[4 5 6]] int64
五、ndarray的多种生成和创建方法
array_g = np.ones((2, 3), order='F')
print(array_g, array_g.dtype)
array_h = np.zeros((3, 3), dtype='int64')
print(array_h, array_h.dtype)
array_i = np.ones_like([[1, 2, 3], [4, 5, 6]])
print(array_i, array_i.dtype)
array_j = np.zeros_like([[1, 2, 3], [4, 5, 6]])
print(array_j, array_j.dtype)
[[1. 1. 1.]
[1. 1. 1.]] float64
[[0 0 0]
[0 0 0]
[0 0 0]] int64
[[1 1 1]
[1 1 1]] int32
[[0 0 0]
[0 0 0]] int32
ones_like(a[, dtype, order, subok]): 生成全为1的ndarray,形状与已知数组相同。a为必传参数,传入一个形似array的数据(array_like,通常是嵌套列表或数组)。dtype表示数组中存储的数据类型,默认与传入的数组相同。另外两个参数通常不关注。
array_k = np.full((2, 3), 2)
print(array_k, array_k.dtype)
array_l = np.full_like([[1, 2, 3], [4, 5, 6]], 3)
print(array_l, array_l.dtype)
array_m = np.empty((2, 3))
print(array_m, array_m.dtype)
array_n = np.empty((2, 4))
print(array_n, array_n.dtype)
[[2 2 2]
[2 2 2]] int32
[[3 3 3]
[3 3 3]] int32
[[1. 1. 1.]
[1. 1. 1.]] float64
[[6.23042070e-307 4.67296746e-307 1.69121096e-306 1.33511562e-306]
[1.37962660e-306 8.34441742e-308 1.42420481e-306 1.24612013e-306]] float64
array_o = np.arange(1, 10, 2)
array_p = np.linspace(0, 20, 5, retstep=True)
array_q = np.linspace(array_o, 5, 3)
array_r = np.logspace(0, 100, 6)
print(array_o, '\n{}'.format(array_p), '\n{}'.format(array_q), '\n{}'.format(array_r))
[1 3 5 7 9]
(array([ 0., 5., 10., 15., 20.]), 5.0)
[[1. 3. 5. 7. 9.]
[3. 4. 5. 6. 7.]
[5. 5. 5. 5. 5.]]
[1.e+000 1.e+020 1.e+040 1.e+060 1.e+080 1.e+100]
array_s = np.random.randint(1, 10, 5)
array_t = np.random.rand(5)
array_u = np.random.uniform(size=5)
array_v = np.random.randn(5)
array_w = np.random.normal(10, 1, 5)
print(array_s, '\n{}'.format(array_t), '\n{}'.format(array_u), '\n{}'.format(array_v), '\n{}'.format(array_w))
[1 7 4 2 8]
[0.68173299 0.92899918 0.01771993 0.03010565 0.74799694]
[0.97895281 0.67811682 0.15493234 0.04435618 0.15152692]
[ 1.24094827 1.27898853 -1.42507622 1.97560767 -0.43269307]
[11.24927114 10.07827993 9.83908081 10.94827526 10.14160875]
array_x = np.array([(5, 5, 5), [5, 5, 5]])
array_y = np.asarray(array_x)
array_z = np.copy(array_x)
print(array_x, '\n{}'.format(array_y), '\n{}'.format(array_z))
[[5 5 5]
[5 5 5]]
[[5 5 5]
[5 5 5]]
[[5 5 5]
[5 5 5]]
array_x[0][1] = 6
print(array_x, '\n{}'.format(array_y), '\n{}'.format(array_z))
[[5 6 5]
[5 5 5]]
[[5 6 5]
[5 5 5]]
[[5 5 5]
[5 5 5]]
array1 = np.array([[[1, 2, 3, 4], [3, 4, 5, 6]], [[7, 8, 9, 10], [9, 10, 11, 12]]])
print(array1, array1.shape)
print(array1[1])
print(array1[1][0])
print(array1[1, 0])
print(array1[0, :1, 1:3])
[[[ 1 2 3 4]
[ 3 4 5 6]]
[[ 7 8 9 10]
[ 9 10 11 12]]] (2, 2, 4)
[[ 7 8 9 10]
[ 9 10 11 12]]
[ 7 8 9 10]
[ 7 8 9 10]
[[2 3]]
array2 = np.unique(array1)
print(array2)
[ 1 2 3 4 5 6 7 8 9 10 11 12]
七、ndarray的运算
1. 逻辑运算
array3 = np.array([[1, 2, 3], [4, 5, 6]])
print(np.all(array3 > 1))
print(np.any(array3 > 1))
False
True
array4 = np.where(array3 > 3, 1, 0)
print(array4)
array5 = np.where(np.logical_and(array3 > 2, array3 < 5), 1, 0)
print(array5)
array6 = np.where(np.logical_or(array3 < 2, array3 > 5), 1, 0)
print(array6)
[[0 0 0]
[1 1 1]]
[[0 0 1]
[1 0 0]]
[[1 0 0]
[0 0 1]]
array7 = np.array([[1, 3, 5], [7, 9, 11]])
print('最小值:', np.min(array7), np.min(array7, axis=0))
print('最大值:', np.max(array7), np.max(array7, axis=1))
print('中位数:', np.median(array7))
print('平均值:', np.mean(array7))
print('标准差:', np.std(array7))
print('方差:', np.var(array7))
print('最小值的索引:', np.argmin(array7))
print('最大值的索引:', np.argmax(array7))
最小值:1 [1 3 5]
最大值:11 [ 5 11]
中位数:6.0
平均值:6.0
标准差:3.415650255319866
方差:11.666666666666666
最小值的索引:0
最大值的索引:5
八、ndarray之间的运算
array8 = np.array([[1, 2, 3], [4, 5, 6]])
print(array8 + 2)
array9 = np.array([[2, 2, 2], [2, 2, 2]])
print(array8 * array9)
[[3 4 5]
[6 7 8]]
[[ 2 4 6]
[ 8 10 12]]
array10 = np.array([[[1, 1, 1], [1, 1, 1]], [[1, 1, 1], [1, 1, 1]]])
print(array8 * array10)
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
array11 = np.array([[1, 1, 1, 1], [1, 1, 1, 1]])
print(array8 * array11)
ValueError: operands could not be broadcast together with shapes (2,3) (2,4)
array12 = np.array([[1, 10]])
array13 = np.array([[1, 2, 3], [4, 5, 6]])
print(array12.shape, array13.shape)
print(np.mat(array12) * np.mat(array13))
print(np.matmul(array12, array13))
print(np.dot(array12, array13))
(1, 2) (2, 3)
[[41 52 63]]
[[41 52 63]]
[[41 52 63]]
array14 = np.array([[1, 2, 3], [4, 5, 6]])
array15 = np.array([[1, 1, 1], [2, 2, 2]])
print(np.concatenate([array14, array15], axis=1))
print(np.concatenate([array14, array15], axis=0))
print(np.hstack([array14, array15]))
print(np.vstack([array14, array15]))
[[1 2 3 1 1 1]
[4 5 6 2 2 2]]
[[1 2 3]
[4 5 6]
[1 1 1]
[2 2 2]]
[[1 2 3 1 1 1]
[4 5 6 2 2 2]]
[[1 2 3]
[4 5 6]
[1 1 1]
[2 2 2]]
array16 = np.array([1, 2, 3, 4, 5, 6])
print(np.split(array16, 2))
print(np.split(array16, [2, 3, 5]))
[array([1, 2, 3]), array([4, 5, 6])]
[array([1, 2]), array([3]), array([4, 5]), array([6])]
十、ndarray读写文件
data1,data2,data3,data4
1,2,3,4
5,6,,7
8,,9,10
array17 = np.genfromtxt('array.csv', delimiter=',', skip_header=1)
print(array17)
np.savetxt('save.csv', array17, fmt='%.0f', delimiter=',')
[[ 1. 2. 3. 4.]
[ 5. 6. nan 7.]
[ 8. nan 9. 10.]]
1,2,3,4
5,6,nan,7
8,nan,9,10
总结
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
● 你相信逛B站也能学编程吗