如何用python算出1乘到100_python数据分析入门必刷!100道题掌握numpy

本文详细记录了刷 numpy-100 题的过程,涵盖了从导入库、创建数组、数组操作到高级功能等多个方面,通过实践加深了对 numpy 库的理解。内容包括创建零向量、查看数组信息、矩阵运算、数据处理、随机数生成、数组操作技巧等,旨在帮助初学者扎实掌握 numpy 数据分析技能。
摘要由CSDN通过智能技术生成

numpy-100 可以说是炒鸡经典的numpy学习资料了~原项目地址:numpy-100 各路大神提供的中文译版也有很多,不过为了巩固自己的学习成果,我还是自己进行了翻译+刷题+总结。对于每道题,均给出了原题翻译、正确答案,以及我的个人心得笔记。如下~

(1) 使用别名“np“调用numpy库。(★☆☆)(import … as …)

import numpy as np

#以下皆用np代numpy

(2) 显示当前numpy库的版本号和配置信息。(★☆☆)(np.__version__, np.show_config)

print(np.__version__)

print(np.show_config())

#v._n.()是常见的函数命名方式

(3) 创建一个大小为10的零向量。(★☆☆)(np.zeros)

np.zeros(10)

(4) 如何获取任意一个数组占用的内存大小?(★☆☆)(size, itemsize)

a = np.random.rand(2,3)

print('%dbytes' %(a.size * a.itemsize))

(5) 如何在命令行中获取numpy的add函数的文档?(★☆☆)(http://np.info)

#win

%run `python -c "import numpy; numpy.info(numpy.add)"`

#mac win版答案为参考答案,然而无法在我电脑的终端直接执行,于是我自己试出来以下命令:

python

import numpy

numpy.info(numpy.add)

(6) 创建一个大小为10的零向量,使之第5个元素为1。(★☆☆)(array[4])

a = np.zeros(10)

a[4] = 1

#如果使用np.zeros()创建更高维的向量,size需要嵌套括号。例如:np.zeros((3,3))

(7) 创建一个向量,使它的值为10到49。(★☆☆)(np.arange)

np.arange(10,50)

(8) 使一个向量逆序(第1个元素变成倒数第1个元素)。(★☆☆)(array[::-1])

a = a[::-1]

(9) 创建一个 3x3 矩阵,其值为0到8。(★☆☆)(reshape)

np.arange(9).reshape(3,3)

(10) 列出 [1,2,0,0,4,0] 该数组中非零元素的索引。(★☆☆)(np.nonzero)

np.nonzero([1,2,0,0,4,0])

(11) 创建一个 3x3 的单位矩阵。(★☆☆)(np.eye)

np.eye(3)

(12) 利用随机数创建一个 3x3x3 的数组。 (★☆☆)(np.random.random)

np.random.random((3,3,3))

#上式为参考答案,但个人觉得以下的写法更简单:

np.random.rand(3,3,3)

(13) 利用随机数创建一个 10x10 的数组,并获取数组的最小元素和最大元素。(★☆☆)(min, max)

a = np.random.rand(10,10)

print(np.min(a),np.max(a))

(14) 创建一个大小为30的随机向量,并求取均值。(★☆☆)(mean)

np.random.rand(30).mean()

(15) 创建一个二维数组,使其边界全部为1,内部全部为0。(★☆☆)(array[1:-1, 1:-1])

#参考答案

a = np.ones((10,10))

a[1:-1,1:-1] = 0

#另一种方法

a = np.zeros((10,10))

a[0]=1

a[-1]=1

a[:,0]=1

a[:,-1]=1

(16) 如何给一个已有的数组加上一个边界(值为0)?(★☆☆)(np.pad)

a = np.random.rand(1,20,(5,5)) #生成一个5x5的随机整数数组

a = np.pad(a,pad_width=1,mode='constant',constant_values=0) #为数组加上边界

np.pad(array, pad_width, mode, **kwargs)

#mode:'constant'常数|'edge'边缘值|'linear_ramp'边缘递减|'maximum'最大值|'minimum'最小值|'mean'均值|'median'中位数

(17) 以下的表达式的运行结果为?(★☆☆)(NaN = not a number, Inf = infinity)

print(0 * np.nan) #输出:nan

print(np.nan == np.nan) #输出:False

print(np.inf > np.nan) #输出:False

print(np.nan - np.nan) #输出:nan

print(np.nan in set([np.nan])) #输出:True

print(0.3 == 3 * 0.1) #输出:False

(18) 创建一个 5x5 矩阵,使得数字 1,2,3,4 恰好处在对角线下方。(★☆☆)(np.diag)

#参考答案

np.diag(1+np.arange(4),k=-1)

#另一种方法

np.diag(np.arange(1,5),-1)

# 0 处于对角线

# 1 位于对角线上方

(19) 创建一个8x8数组,使之形成棋盘格图案。 (★☆☆)(array[::2])

#参考答案

Z = np.zeros((8,8),dtype=int)

Z[1::2,::2] = 1

Z[::2,1::2] = 1

#另一种方法

a = np.zeros((8,8))

a[::2,::2]=1

a[1::2,1::2]=1

(20) 对于一个形为 (6,7,8) 的数组,如何用形似 (x,y,z) 的索引取出其第100个元素?(★☆☆)(np.unravel_index)

np.unravel_index(99,(6,7,8))

(21) 使用 tile 函数创建一个 8x8 棋盘格矩阵。(★☆☆)(np.tile)

np.tile( np.array([[0,1],[1,0]]), (4,4))

(22) 对一个 5x5 矩阵进行标准化。(★☆☆)((x - mean) / std)

a = np.random.random((5,5))

a = (a - np.mean (a)) / (np.std (a))

(23) 创建一个自定义类型,用四个无符号字节存放颜色信息(RGBA)。 (★☆☆)(np.dtype)

color = np.dtype([("r", np.ubyte, 1),

("g", np.ubyte, 1),

("b", np.ubyte, 1),

("a", np.ubyte, 1)])

(24) 矩阵乘法(点乘):5x3矩阵 乘 3x2矩阵。(★☆☆)(np.dot | @)

#参考答案1

np.dot(np.ones((5,3)), np.ones((3,2)))

#参考答案2,python3.5及以上支持

np.ones((5,3)) @ np.ones((3,2))

(25) 给定一维数组,对值落在 [3,8] 区间内的元素取负。(★☆☆)(>, <=)

#参考答案

Z = np.arange(11)

Z[(3 < Z) & (Z <= 8)] *= -1

#另一种方法

a = np.arange(10)

for i in a:

if i>3 and i<=8:

a[i] = -a[i]

(26) 这段代码的运行结果是什么? (★☆☆)(np.sum)

print(sum(range(5),-1))

from numpy import *

print(sum(range(5),-1))

9

10

#range(5)表示0,1,2,3,4

#Python的sum(),对一系列数值求和,0+1+2+3+4-1=9

#numpy.sum(a,axis=None),数组求和,第二个参数表示参与运算的轴

#为了更好地理解numpy.sum()中的axis,用一个二维数组演示如下:

a = np.arange(20).reshape(4,5)

print('数组:','\n',a)

print('未指定轴:',np.sum(a))

print('轴=0:',np.sum(a,0))

print('轴=1:',np.sum(a,1))

print('轴=-1:',np.sum(a,-1))

print('轴=-2:',np.sum(a,-2))

数组:

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]]

未指定轴:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值