numpy教程02---ndarray数据和reshape重塑

欢迎关注公众号【Python开发实战】,免费领取Python学习电子书!

工具-numpy

numpy是使用Python进行数据科学的基础库。numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变换和随机数函数。

ndarray数据

导入numpy

import numpy as np

dtype

numpy的ndarray一定程度上也是高效的,因为他们的所有元素必须是同一类型,通常是数字。可以通过查看dtype属性,检查数据类型。

c = np.arange(1, 5)
print(c.dtype, c)
输出:int32 [1 2 3 4]

除了让numpy猜测具体使用哪种数据类型,还可以在创建数组时,设置dtype参数来明确指定数据类型。

d = np.arange(1, 5, dtype=np.complex64)
print(d.dtype, d)
输出:complex64 [1.+0.j 2.+0.j 3.+0.j 4.+0.j]

可用的数据类型有int8, int16, int32, int64, uint8|16|32|64,float16|32|64,complex64|128等

itemsize

itemsize属性返回每个元素的大小(字节)

e = np.arange(1, 5, dtype=np.int64)
e.itemsize

输出:

8

数据缓冲区

一个数组的数据,实际上作为一个平面(一维)字节缓冲区存储在内存中, 它可以通过data属性来获取,但很少用到它。

f = np.array([[1, 2], [1000, 2000]], dtype=np.int32)
f.data

输出:

<memory at 0x000000000531FC18>

多个ndarray可以共享同一个数据缓冲区,这就意味着修改一个ndarray也会修改其他的ndarray。

重塑ndarray

改变ndarray的形状和设置它的形状一样简单,但是ndarray的大小必须保持不变。

g = np.arange(24)
print(g)
print("秩:", g.ndim)
输出:[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
	秩: 1
g.shape = (6, 4)
print(g)
print("秩:", g.ndim)
输出:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]
秩: 2
g.shape = (2, 3, 4)
print(g)
print("秩:", g.ndim)
输出:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
秩: 3

reshape

reshape函数返回一个指向相同数据的新ndarray对象,这意味着修改一个ndarray也会修改另一个ndarray。

g2 = g.reshape(4, 6)
print(g2)
print("秩:", g2.ndim)
输出:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
秩: 2

将第1行,第2列的元素修改为999

g2[1, 2] = 999
g2

输出:

array([[  0,   1,   2,   3,   4,   5],
       [  6,   7, 999,   9,  10,  11],
       [ 12,  13,  14,  15,  16,  17],
       [ 18,  19,  20,  21,  22,  23]])

g的对应元素也被修改了

g

输出:

array([[[  0,   1,   2,   3],
        [  4,   5,   6,   7],
        [999,   9,  10,  11]],

       [[ 12,  13,  14,  15],
        [ 16,  17,  18,  19],
        [ 20,  21,  22,  23]]])

ravel

ravel函数返回一个新的一维ndarray,也指向相同的数据

g3 = g.ravel()
g3

输出:

array([  0,   1,   2,   3,   4,   5,   6,   7, 999,   9,  10,  11,  12,
        13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23])

将g3的第一个元素修改为1000,则g和g2的对应元素也被修改了

g3[0] = 1000
print(g3)
print(g2)
print(g)
输出:
[1000    1    2    3    4    5    6    7  999    9   10   11   12   13
      	14   15   16   17   18   19   20   21   22   23]
   		
[[1000    1    2    3    4    5]
 [   6    7  999    9   10   11]
 [  12   13   14   15   16   17]
 [  18   19   20   21   22   23]]
 	 
[[[1000    1    2    3]
  [   4    5    6    7]
  [ 999    9   10   11]]

 [[  12   13   14   15]
  [  16   17   18   19]
  [  20   21   22   23]]]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯旋.Lau

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值