栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[Python]numpy数据分析练习[1~20]]

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Python]numpy数据分析练习[1~20]]

[Python]numpy数据分析练习[1~20]]

题目地址
建议把老师发的没答案的做了然后校对 答案代码在上面链接里有 这篇博客主要记一下笔记

题目及解析 1、导入numpy作为np 并查看版本
import numpy as np
print(np.__version__)
2、如何创建一维数组

创建从0到9的一维数字数组

import numpy as np
arr np.arange(10)
print(arr)
3. 如何创建一个布尔数组

创建一个numpy数组元素值全为True 真 的数组

使用ones生成全1数组 类型为bool型,注意ones拼写有s

import numpy as np
arr np.ones((3,3),dtype bool)
print(arr)

使用full填充 记住full需要告诉用什么填充

import numpy as np
arr np.full((3,3),True,dtype bool)
print(arr)
4.如何从一维数组中提取满足指定条件的元素

从 arr 中提取所有的奇数

import numpy as np
arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(arr[arr%2 1])

arr%2 1也是ndarray类

import numpy as np
arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(arr%2 1)
print(type(arr%2 1))
print(arr[[False,True,False,True,False,True,False,True,False,True]])

输出

[False True False True False True False True False True]
 class numpy.ndarray 
[1 3 5 7 9]

实际上这玩意就是布尔索引
布尔型索引指的是一个布尔型ndarray数组 一般为一维 对应另一个ndarray数组的每行 布尔型数组的个数要必须与另一个多维数组的行数一致。若布尔型数组内的某个元素为True 则选取另一个多维数组的行 反之不选取。

5. 如何用numpy数组中的另一个值替换满足条件的元素项

将arr中的所有奇数替换为-1。
原理同上 操作的时候考虑先筛选出来 然后再赋值

import numpy as np
arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[arr%2 1] -1
print(arr)
6. 如何在不影响原始数组的情况下替换满足条件的元素项

将arr中的所有奇数替换为-1 而不改变arr。

使用copy,out和arr是完全没有关系的

import numpy as np
arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
out arr.copy()
out[out%2 1] -1
print(out)
print(arr)

使用where
相当于一个三目运算符

np.where(条件 如果为真的操作 如果为假的操作)
import numpy as np
arr np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
out np.where(arr%2 1,-1,arr)
print(arr)
print(out)
7. 如何改变数组的形状

将一维数组转换为2行的2维数组
使用reshape改变数组形状 设置-1自动换行

import numpy as np
arr np.arange(10)
print(arr.reshape(2,-1))
8.如何垂直叠加两个数组

垂直堆叠数组a和数组b
使用vstack垂直堆叠

import numpy as np
a np.arange(10).reshape(2,-1)
b np.repeat(1, 10).reshape(2,-1)
print(np.vstack((a,b)))#也可以传[a,b]但记住 别写成np.vstack(a,b)

使用concatenate连接多个数组 axis默认为0

print(np.concatenate([a,b],axis 0))

使用r_[a,b]
将切片对象沿第一个轴 按行 连接c_[a,b]沿第二个轴拼接 按列

print(np.r_[a,b])
9. 如何水平叠加两个数组

同上

import numpy as np
a np.arange(10).reshape(2,-1)
b np.repeat(1, 10).reshape(2,-1)
print(np.c_[a,b])
print(np.concatenate([a,b],axis 1))
print(np.hstack([a,b]))
10. 如何在无硬编码的情况下生成numpy中的自定义序列

创建以下模式而不使用硬编码。只使用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])

答案
硬编码是将数据直接嵌入到程序或其他可执行对象的 源代码 中的软件开发实践。就是不能直接输入数据 要用函数生成

拆分成两部分 前一部分使用repeat让a的每个元素重复3次 后一部分使用tile让整个a重复3次

import numpy as np
a np.array([1,2,3])
print(np.hstack((np.repeat(a,3),np.tile(a,3))))
11. 如何获取两个numpy数组之间的公共项

获取数组a和数组b之间的公共项。

使用intersect1d求交集
注意是1d不是ld
注意是1d不是ld
注意是1d不是ld

import numpy as np
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])
print(np.intersect1d(a,b))

其他相关操作

import numpy as np
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])
print(np.intersect1d(a,b))#求交集
print(np.setdiff1d(a,b))#求差集
print(np.setxor1d(a,b))#求异或集 仅仅存在于一个里 
print(np.union1d(a,b))#求并集
12. 如何从一个数组中删除存在于另一个数组中的项

使用setdiff1d求差集

import numpy as np
a np.array([1,2,3,4,5])
b np.array([5,6,7,8,9])
print(np.setdiff1d(a,b))#求差集
13. 如何得到两个数组元素匹配的位置

使用where进行筛选
只有condition条件的时候结果是符合条件的位置信息
可以看一下这篇文章

import numpy as np
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])
index np.where(a b)
print(index)
14. 如何从numpy数组中提取给定范围内的所有数字

获取5到10之间的所有项目

使用where先获取符合条件的下标 然后通过索引输出对应的值
但是where里面好像不支持连写 也不让用and

import numpy as np
a np.array([2, 6, 1, 9, 10, 3, 27])
index np.where((a 5) (a 10))
print(a[index])

其他操作

import numpy as np
a np.array([2, 6, 1, 9, 10, 3, 27])
print(a[(a 5) (a 10)])
15. 如何创建一个python函数来处理scalars并在numpy数组上工作

转换适用于两个标量的函数maxx 以处理两个数组
给定

def maxx(x, y):
 Get the maximum of two items 
 if x y:
 return x
 else:
 return y
maxx(1, 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.])

答案

知识盲区了啊啊
首先 python的标量 scalars 是什么
请参看这篇文档

函数如何处理数组 重写一个参数为数组的 然而这题要求转换 也就是不能动原来的函数。
我们可以使用vectorize来整

numpy.vectorize(pyfunc, otypes None, doc None, excluded None, cache False, signature None)
Parameters: 
pyfunc :python函数或方法
otypes : 输出数据类型。必须将其指定为一个typecode字符串或一个数据类型说明符列表。每个输出应该有一个数据类型说明符。
doc : 函数的docstring。如果为None 则docstring将是 pyfunc.__doc__。
excluded : 表示函数不会向量化的位置或关键字参数的字符串或整数集。这些将直接传递给未经修改的pyfunc
cache :如果为True 则缓存第一个函数调用 该函数调用确定未提供otype的输出数。
signature : 广义通用函数签名 例如 (m,n),(n)- (m)用于矢量化矩阵 - 向量乘法。如果提供的话 pyfunc将调用 并期望返回 具有由相应核心维度的大小给出的形状的数组。默认情况下 pyfunc假定将标量作为输入和输出。
Returns: 
vectorized :向量化的数组
import numpy as np
def maxx(x, y):
 Get the maximum of two items 
 if x y:
 return x
 else:
 return y
pair_max np.vectorize(maxx,otypes [float])
a np.array([5, 7, 9, 8, 6, 4, 5])
b np.array([6, 3, 4, 8, 9, 7, 1])
print(pair_max(a, b))
16. 如何交换二维numpy数组中的两列

在数组arr中交换列1和2。

import numpy as np
arr np.arange(9).reshape(3,3)
print(arr)
print(arr[:,[1,0,2]])
17. 如何交换二维numpy数组中的两行

交换数组arr中的第1和第2行

import numpy as np
arr np.arange(9).reshape(3,3)
print(arr)
print(arr[[1,0,2],:])
18. 如何反转二维数组的行

::-1反转

import numpy as np
arr np.arange(9).reshape(3,3)
print(arr)
print(arr[::-1,:])
19. 如何反转二维数组的列
import numpy as np
arr np.arange(9).reshape(3,3)
print(arr)
print(arr[:,::-1])
20. 如何创建包含5到10之间随机浮动的二维数组

创建一个形状为5x3的二维数组 以包含5到10之间的随机十进制数
使用random.uniform构建随机二维数组

import numpy as np
arr np.arange(9).reshape(3,3)
rand_arr np.random.uniform(5,10,size (5,3))
print(rand_arr)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号