Numpy基础实验

NumPy基础
=========
-------

1. 引入numpy,为后续使用
import numpy as np
2. 根据以下要求使用numpy进行数组的创建:
    1. 从python结构转换。给定列表`[1,2,3]`,创建数组x;
    2. 使用numpy内置函数进行数组的创建:
       - 创建用`0`填充的数组,形状为:`(2,3)`
       - 创建用`1`填充的数组,形状为:`(3,2)`
       - 创建由随机数组成的数组,形状为:`(3,2)`
       - 创建具有有规律递增值的数组,创建后数组值为`[ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9]`
       - 创建具有指定数量元素的数组,并在指定的开始值和结束值之间保持间隔平均,创建后的数组值为`[ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ]`
#A从python结构转换。给定列表[1,2,3],创建数组x;
a = [1,2,3]
b = np.array(a)
print(a)
print(b)


#B
arr = np.zeros((2,3))
print(arr)
arr = np.ones((3,2))
print(arr)
arr = np.random.rand(3,2)
print(arr)
arr = np.arange(2,3,0.1)
print(arr)
arr = np.linspace(2,2.9,10)
print("arr0:",arr)
arr = list(np.linspace(1,4,6))
print(arr)

3. 创建一个值为0到15数字组成的数组a,确保其形状为`(3,5)`,创建好的数组应为:

```python
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

```

并且输出以下信息:

    (1) 数组形状
    (2) 数组的轴的个数
    (3) 数组的类型
    (4) 数组元素的总数
    (5) 数组中元素类型
    (6) 数组中每个元素的字节大小
arr = np.arange(0,15).reshape(3,5)
print(arr)
print("数组的形状:",arr.shape)
print("数组的轴个数:",arr.ndim)
print("数组的类型:",type(arr))
print("数组元素的总数:",arr.size)
print("数组中元素的类型:",arr.dtype)
print("数组中每个元素的字节大小:",arr.itemsize)
4. 根据以下要求进行代码实现:
```python
a = np.random.random((2,3))
```

a为由随机数组成,且形状为(2,3)的数组,现要求输入以下信息:

    (1) 输出数组中所有元素的总和
    (2) 输出数组中最大的元素
    (3) 输出数组每列的和
    (4) 输出数组每行的累积和
    (5) 输出对数组中每个元素进行开方操作的结果
a = np.random.random((2,3))
print(a)
a_sum = np.sum(a)
print(a_sum)
a_max = np.max(a)
print(a_max)
a_r = np.sum(a,axis = 0)
print(a_r)
a_c = np.sum(a,axis = 1)
print(a_c)
a_sqrt = np.sqrt(a)
print(a_sqrt)
#求元素的平方
a = np.square(a)
print(a)
5. 根据以下要求进行代码实现:


```python
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
```
    (1) 使用arange函数创建由0到10的数字的三次方组成的数组`x`,创建后的数组应如上:
    (2) 输出数组x中索引为2的元素
    (3) 输出数组x中第二个至第四个元素(数组从第一个元素开始)
    (4) 将数组x中的索引为奇数的元素设为-1,并输出(数组索引从0开始)
    (5) 将数组x进行逆序并输出
array = np.arange(0,10)**3
print(array)
print(array[2])
print(array[1:4])
array[1::2]=-1
print(array)
print(array[::-1])
6. 将数组x的形状重设为2维数组,其形状为`(2,5)`,并输出第2列的每行数据
array = array.reshape(2,5)
print(array)
7. 将数组x进行展平,还原至原来的形状
array = array.flatten()
print(array)
8. 使用整数数组实现数组的索引:
```python
a = np.arange(12)**2
one_index = [1,1,3,8,5]
two_index = [[3,4],[9,7]]
```
其中a是创建的一维数组,one_index和two_index是由数组a的索引组成,实现将数组a中对于索引的元素值的提取,并确保提取后的形状与索引列表相同。
a = np.arange(12)
one_index = [1,1,3,8,5]
two_index = [[3,4],[9,7]]
# 使用整数数组索引提取元素值
arr1 = a[one_index]
arr2 = a[np.array(two_index)]
print(arr1)
print(arr2)
9. 使用布尔数组实现数组a中的元素的提取。

    首先需要将数组a的形状重设为`(3,4)`,接着使用布尔数组提取数组a中大于4的元素。
a = a.reshape(3,4)
print(a)
b = a[a>4]
print(b)
10. 根据以下要求,代码实现线性代数操作。

```python
a = np.array([[1.,2.],[3.,4.]])
y = np.array([[5.],[7.]])
```


    (1) 输出创建的数组a
    (2) 输出数组a的转置
    (3) 输出形状为(2,2)的对角矩阵b
    (4) 输出对角矩阵的迹
    (5) 求解数组a和数组y的解
a = np.array([[1.,2.],[3.,4.]])
y = np.array([[5.],[7.]])
print(a)
print(a.T)
b = np.eye(2)
b0 = np.identity(2)
print(b)
print(b0)
11. 如何替换满足条件的项目而不影响原始数组?
难度等级: L2

要求: 将数组中的所有奇数替换为-1,而不更改数组

输入:

>arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

目标输出:

```
out
#>  array([ 0, -1,  2, -1,  4, -1,  6, -1,  8, -1])
arr
#>  array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
```
arr = np.array([0,1,2,3,4,5,6,7,8,9])
b = arr.copy()
b[arr%2!=0] = -1
print(b)
print(arr)
12. 如何在numpy中生成自定义序列而不直接写死?
难度等级: L2

要求:不写死的创建以下模式,仅使用numpy函数和下面的输入数组a

输入:

> a = np.array([1,2,3])

目标输出:

> array([1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3])
a = np.array([1, 2, 3])
a1 = np.repeat(a, 3)
a2 = np.tile(a, 3)
result = np.concatenate((a1, a2))
print(result)

13. 如何获取两个python numpy数组之间的公共项?
难度等级: L2

要求:获取a和b之间的共同项

输入:
```
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
```
目标输出:

> array([2, 4])
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
c= np.intersect1d(a, b)
print (c)

14. 如何从一个数组中删除存在于另一个数组中的那些项?
难度等级: L2

要求:从数组a删除数组b中存在的所有项

输入:
```
a = np.array([1,2,3,4,5])
b = np.array([5,6,7,8,9])
```
目标输出:
```
array([1,2,3,4])
```
a = np.array([1,2,3,4,5])
b = np.array([5,6,7,8,9])
c = np.setdiff1d(a,b)
print(c)
15. 如何获得两个数组的相同元素匹配的对应位置?
难度等级: L2

要求:获取数组a和b相同元素匹配的位置

输入:
```
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
```
目标输出:

> (array([1, 3, 5, 7]),)
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
c = np.where(a == b)
print(c)
16. 如何从numpy数组中提取给定范围内的所有数字?
难度等级: L2

要求:从数组a中获取5到10之间的所有项

输入:

> a = np.array([2, 6, 1, 9, 10, 3, 27])

目标输出:

> (array([6, 9, 10]),)
a = np.array([2, 6, 1, 9, 10, 3, 27])
b = a[(a>=5)&(a<=10)]
print(b)
17. 如何使处理标量的python函数在numpy数组上发挥作用?
难度等级: L2

要求:将对两个标量起作用的函数maxx转换为对两个数组起作用

输入:
```
def maxx(x, y):
    """Get the maximum of two items"""
    if x >= y:
        return x
    else:
        return y

maxx(1, 5)
#> 5
```

目标输出:
```
a = np.array([5, 7, 9, 8, 6, 4, 5])
b = np.array([6, 3, 4, 8, 9, 7, 1])
pair_max(a, b)
#> array([ 6.,  7.,  9.,  8.,  9.,  7.,  5.])
def maxx(x, y):
    """Get the maximum of two items"""
    if x >= y:
        return x
    else:
        return y
a = np.array([5, 7, 9, 8, 6, 4, 5])
b = np.array([6, 3, 4, 8, 9, 7, 1]) 
pair_max(a,b)
18. 如何反转2维数组的列?
难度等级: L2

要求:反转2维数组arr的列。
```
输入
arr = np.arange(9).reshape(3,3)
# 创建一个二维数组
a= np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 反转二维数组的列
b= a[:, ::-1]

# 打印反转后的数组
print(b)

19. 如何在python numpy数组中仅打印3个小数位?
难度等级: L1

要求:打印或仅显示numpy数组rand_arr的3个小数位。

输入:

> rand_arr = np.random.random((5,3))
arr = np.random.random((5,3))
arr = np.round(rand_arr, 3)
print(arr)

20. 如何限制numpy数组输出中打印的项目数?
难度等级: L1

要求:限制在python numpy数组a中打印的项目数最多为6个元素。

输入:
```
a = np.arange(15)
#> array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
```
目标输出:
```
#> array([ 0,  1,  2, ..., 12, 13, 14])
```
# 创建一个示例数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 设置打印选项,限制最多显示6个元素
np.set_printoptions(threshold=6)

# 打印数组
print(a)
# 本章实训
1. 导入模块
import numpy as np
import csv
2. 获取数据
iris_data = []
with open("iris.csv") as csvfile:
    csv_reader = csv.reader(csvfile)  # 用csv.reader读取csvfile文件
    birth_header = next(csv_reader)  # 读取第一行各列标题
    for row in csv_reader:
        iris_data.append(row)
3. 数据清理:去掉索引号
iris_list = []
for row in iris_data:
    iris_list.append(tuple(row[1:]))
iris_list
4. 数据统计
(1)创建数据类型
datatype = np.dtype([("Sepal.Length", np.float64),
                     ("Sepal.Width", np.float64),
                     ("Petal.Length", np.float64),
                     ("Petal.Width", np.float64),
                     ("Species", np.str_, 40)])
datatype
(2)创建二维数组
iris_data = np.array(iris_list, dtype=datatype)
iris_data
(3)将待处理数据的类型转化为float类型
petal_length = iris_data["Petal.Length"].astype(float)
petal_length
(4)排序
np.sort(petal_length)
(5)数据去重
np.unique(petal_length)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值