numpy:生成ndarray,数据类型,数组算术,切片

生成ndarray

生成ndarray数组通常采用有三种方法:

  1. 使用array函数
  2. 使用zeros, ones来生成全0、全1数组
  3. 使用arange函数

接下来分别介绍:

1. array函数

array函数接受任意的序列型对象,生成一个新的包含传递数据的numpy数组。
另外,嵌套序列会自动转换成多维数组。

shape属性表征数组每一维度的数量
dtype属性描述数组的数据类型

import numpy as np
data1 = (1, 3, 3, 5)
data2 = [[1, 2, 3, 4],
         [1, 2, 3, 3.0]]
arr1 = np.array(data1)
arr2 = np.array(data2)
print(arr1.shape, arr1.dtype)  # (4, ) int32
print(arr2.shape, arr2.dtype)  # (2, 4) float64

.

2.zeros, ones

给定形状和长度后,可以通过zeros、ones一次性创建全0、全1数组。
若想创建高维数组,则需要传入一个元组。
这种方法生成的数组默认数据类型为float64。

import numpy as np
data1 = np.zeros(4)
data2 = np.ones((3, 4))
print(data1)           
# [0. 0. 0. 0.]
print(data2)           
# [[1. 1. 1. 1.]
#  [1. 1. 1. 1.]
#  [1. 1. 1. 1.]]

.

3.arange函数

arange是python内建函数range的数组版。
这种方法生成的数组默认数据类型为int32。

import numpy as np
data3 = np.arange(5)
print(data3)       # [0 1 2 3 4]

.

ndarray的数据类型

数据类型,即dtype,是一个特殊的对象,它包含了ndarray需要为某一种类型数据所申明的内存块信息(表示数据的数据)

可以在生成ndarray时候显式声明dtype

import numpy as np
data = np.array([1, 2, 3], dtype=np.float64)
print(data)       # [1. 2. 3.]

可以使用astype方法显式地转换数组的数据类型

import numpy as np
data = np.array(['12', '34', '56'])
print(data, data.dtype)       # ['12' '34' '56'] <U2
float_data = data.astype(np.float64)
print(float_data)             # [12. 34. 56.]

.

数组算术

numpy数组允许进行批量操作,任何两个同尺寸数组之间的算术都是逐元素操作
带有标量计算时,也是针对数组的每一个元素进行一遍操作

import numpy as np
data_np = np.array([1, 2, 3])
data_np_2 = np.array([0, 1, 5])
data_py = [1, 2, 3]
print(data_np * data_np)       # [1 4 9]
print(1 / data_np)             # [1.         0.5        0.33333333]
print(data_np > data_np_2)     # [ True  True False]
print(data_py * data_py)
# TypeError: can't multiply sequence by non-int of type 'list'

相反python数组就不能这样操作

.

数组切片

numpy数组的切片相比于python的内建列表,有一点不同

  • 数组的切片是原数组的视图(而列表中是拷贝)。切片不是单纯数据的拷贝,任何对视图的修改都会反映到原数组上。
import numpy as np
data_np = np.array([1, 2, 3])
data_py = [1, 2, 3]
data_1 = data_np[0:2]
data_2 = data_py[0:2]
data_1[:] = 4
data_2[:] = 4          # TypeError: can only assign an iterable
print(data_np)         # [4 4 3]
print(data_py)         # [1, 2, 3]

如果想要一份数组切片的拷贝而不是一份视图,可以用浅拷贝的方法,如data_np[0:2].copy()

.

参考资料

《利用python进行数据分析》

发布了19 篇原创文章 · 获赞 1 · 访问量 785

猜你喜欢

转载自blog.csdn.net/weixin_43901558/article/details/104667995