Numpy基本使用方法

Numpy基本使用方法

第一节

创建数组

import numpy as np
import random

# 创建数组
a = [1, 2, 3, 4, 5]
a1 = np.array(a)
print(a1)  # [1 2 3 4 5]
b = range(10)
b1 = np.array(b)
print(b1)  # [0 1 2 3 4 5 6 7 8 9]

数组的类名

# 数组的类名
print(type(a1))  # <class 'numpy.ndarray'>
print(type(b1))  # <class 'numpy.ndarray'>

数据的类型

# 数据的类型
print(a1.dtype)  # int32
c1 = np.array([random.random() for i in range(10)])
print(c1)
# [0.65076793 0.78410146 0.94405112 0.58741766 0.23018049 0.80708392 0.5297858  0.14736833 0.53402873 0.21310533]
print(c1.dtype)  # float64
d1 = np.array([True, False, False, True])
print(d1.dtype)  # bool

指定数组类型

# 指定数组类型
a2 = np.array(a, dtype=float)
print(a2.dtype)  # float64
a3 = np.array(a, dtype="float")
print(a2.dtype)  # float64

修改数组类型

# 修改数组类型
d2 = d1.astype(int)
print(d2)  # [1 0 0 1]
print(d2.dtype)  # int32
a4 = a1.astype(dtype="float")
print(a4)  # [1. 2. 3. 4. 5.]
print(a4.dtype)  # float64

修改浮点型小数位

# 修改浮点型小数位
print(c1)
# 156 0.41847005 0.27127742 0.59553829 0.40378794 0.90308214 0.86897877 0.20906481 0.1832515]
c2 = c1.round(2)  # 保留两位小数
print(c2)
# [0.35 0.78 0.93 0.63 0.81 0.15 0.95 0.21 0.29 0.48]

完整代码

import numpy as np
import random

# 创建数组
a = [1, 2, 3, 4, 5]
a1 = np.array(a)
print(a1)  # [1 2 3 4 5]
b = range(10)
b1 = np.array(b)
print(b1)  # [0 1 2 3 4 5 6 7 8 9]

# 数组的类名
print(type(a1))  # <class 'numpy.ndarray'>
print(type(b1))  # <class 'numpy.ndarray'>

# 数据的类型
print(a1.dtype)  # int32
c1 = np.array([random.random() for i in range(10)])
print(c1)
# [0.65076793 0.78410146 0.94405112 0.58741766 0.23018049 0.80708392 0.5297858  0.14736833 0.53402873 0.21310533]
print(c1.dtype)  # float64
d1 = np.array([True, False, False, True])
print(d1.dtype)  # bool

# 指定数组类型
a2 = np.array(a, dtype=float)
print(a2.dtype)  # float64
a3 = np.array(a, dtype="float")
print(a2.dtype)  # float64

# 修改数组类型
d2 = d1.astype(int)
print(d2)  # [1 0 0 1]
print(d2.dtype)  # int32
a4 = a1.astype(dtype="float")
print(a4)  # [1. 2. 3. 4. 5.]
print(a4.dtype)  # float64

# 修改浮点型小数位
print(c1)
# 156 0.41847005 0.27127742 0.59553829 0.40378794 0.90308214 0.86897877 0.20906481 0.1832515]
c2 = c1.round(2)  # 保留两位小数
print(c2)
# [0.35 0.78 0.93 0.63 0.81 0.15 0.95 0.21 0.29 0.48]

第二节

数组的形状

import numpy as np

# 数组的形状
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a.shape)  # (2, 6) 2行6列

修改数组的形状

# 修改数组的形状
a1 = a.reshape(3, 4)  # 修改为3行4列
print(a1.shape)  # (3, 4) 3行4列
print(a1)
"""
[[3 4 5 6]
 [7 8 4 5]
 [6 7 8 9]]
"""
print(a.shape)  # (2, 6) 修改数组形状会指向新的对象,不会修改原数组本身

把数据转换成一维数组

# 把数据转换成一维数组
a2 = a.flatten()
print(a2)  # [3 4 5 6 7 8 4 5 6 7 8 9]

数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上

# 数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上
b = a*10
print(b)  # [[30 40 50 60 70 80][40 50 60 70 80 90]]

c = np.arange(20)
print(c)  # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
c1 = c.reshape(4, 5)
print(c1)
""" 
[[0  1  2  3  4]
 [5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]] 
"""
d = np.array([1, 1, 1, 1, 1])
d1 = d.reshape(1, 5)
print(d1)  # [[1 1 1 1 1]] (1, 5)

print(c1 - d1)
""" 
所有元素全部 -1,即所有行全部减d1这个1行5列的数组
[[-1  0  1  2  3]
 [4  5  6  7  8]
 [9 10 11 12 13]
 [14 15 16 17 18]] 
 """

# 广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

完整代码

import numpy as np

# 数组的形状
a = np.array([[3, 4, 5, 6, 7, 8], [4, 5, 6, 7, 8, 9]])
print(a.shape)  # (2, 6) 2行6列

# 修改数组的形状
a1 = a.reshape(3, 4)  # 修改为3行4列
print(a1.shape)  # (3, 4) 3行4列
print(a1)
"""
[[3 4 5 6]
 [7 8 4 5]
 [6 7 8 9]]
"""
print(a.shape)  # (2, 6) 修改数组形状会指向新的对象,不会修改原数组本身

# 把数据转换成一维数组
a2 = a.flatten()
print(a2)  # [3 4 5 6 7 8 4 5 6 7 8 9]

# 数组的计算/广播机制,在运算过程中加减乘除的值被广播到所有元素上
b = a*10
print(b)  # [[30 40 50 60 70 80][40 50 60 70 80 90]]

c = np.arange(20)
print(c)  # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
c1 = c.reshape(4, 5)
print(c1)
""" 
[[0  1  2  3  4]
 [5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]] 
"""
d = np.array([1, 1, 1, 1, 1])
d1 = d.reshape(1, 5)
print(d1)  # [[1 1 1 1 1]] (1, 5)

print(c1 - d1)
""" 
所有元素全部 -1,即所有行全部减d1这个1行5列的数组
[[-1  0  1  2  3]
 [4  5  6  7  8]
 [9 10 11 12 13]
 [14 15 16 17 18]] 
 """

# 广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。

第三节

读取CSV文件

import numpy as np

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"

# 将文件对象通过numpy.loadtxt方法 实例化
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t2)
print(t2.shape)  # (1688, 4)

索引

# 取行
print(t2[2])  # 取索引为2的行,即第三行
""" [5845909  576597   39774  170708] """

# 取连续的多行
print(t2[2:])  # 取索引为2开始的所有行
"""[[5845909  576597   39774  170708]
 [2642103   24975    4542   12829]
 [1168130   96666     568    6666]
 ...
 [ 142463    4231     148     279]
 [2162240   41032    1384    4737]
 [ 515000   34727     195    4722]]
    """

# 取不连续的多行
print(t2[[2, 3, 4]])  # 取索引为2,3,4的行
""""
[[5845909  576597   39774  170708]
 [2642103   24975    4542   12829]
 [1168130   96666     568    6666]]
"""
# t2[2] = t2[2,] = t2[2, :] 效果是一样的,都是取索引为2的行


# 取列
print(t2[:, 0])  # 取索引为0的所有元素,即第一列
""" [4394029 7860119 5845909 ...  142463 2162240  515000] """

# 取连续多列
print(t2[:, 2:])  # 取索引为2的列开始往后所有的列
""" [[  5931  46245]
 [ 26679      0]
 [ 39774 170708]
 ...
 [   148    279]
 [  1384   4737]
 [   195   4722]] """

# 取不连续的多行
print(t2[:, [2, 3]])  # 取索引为2,3的列
""" [[  5931  46245]
 [ 26679      0]
 [ 39774 170708]
 ...
 [   148    279]
 [  1384   4737]
 [   195   4722]] """

# 取行和列交叉的值
print(t2[2, 3])  # 取第二行和第三列交叉的值
""" 170708 """

# 取多个不相邻的点
# 取出来的结果是(0,0) (2,1) (2,3)(行,列)
print(t2[[0, 2, 2], [0, 1, 3]])
""" [4394029  576597  170708] """

完整代码

import numpy as np

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"

# 将文件对象通过numpy.loadtxt方法 实例化
t2 = np.loadtxt(us_file_path, delimiter=",", dtype="int")
print(t2)
print(t2.shape)  # (1688, 4)

# 取行
print(t2[2])  # 取索引为2的行,即第三行
""" [5845909  576597   39774  170708] """

# 取连续的多行
print(t2[2:])  # 取索引为2开始的所有行
"""[[5845909  576597   39774  170708]
 [2642103   24975    4542   12829]
 [1168130   96666     568    6666]
 ...
 [ 142463    4231     148     279]
 [2162240   41032    1384    4737]
 [ 515000   34727     195    4722]]
    """

# 取不连续的多行
print(t2[[2, 3, 4]])  # 取索引为2,3,4的行
""""
[[5845909  576597   39774  170708]
 [2642103   24975    4542   12829]
 [1168130   96666     568    6666]]
"""
# t2[2] = t2[2,] = t2[2, :] 效果是一样的,都是取索引为2的行


# 取列
print(t2[:, 0])  # 取索引为0的所有元素,即第一列
""" [4394029 7860119 5845909 ...  142463 2162240  515000] """

# 取连续多列
print(t2[:, 2:])  # 取索引为2的列开始往后所有的列
""" [[  5931  46245]
 [ 26679      0]
 [ 39774 170708]
 ...
 [   148    279]
 [  1384   4737]
 [   195   4722]] """

# 取不连续的多行
print(t2[:, [2, 3]])  # 取索引为2,3的列
""" [[  5931  46245]
 [ 26679      0]
 [ 39774 170708]
 ...
 [   148    279]
 [  1384   4737]
 [   195   4722]] """

# 取行和列交叉的值
print(t2[2, 3])  # 取第二行和第三列交叉的值
""" 170708 """

# 取多个不相邻的点
# 取出来的结果是(0,0) (2,1) (2,3)(行,列)
print(t2[[0, 2, 2], [0, 1, 3]])
""" [4394029  576597  170708] """

第四节

将数组中的nan更换为对应列的均值

import numpy as np

t = np.arange(24)
t1 = t.reshape(4, 6).astype("float")
t1[1, 2:] = np.nan


print(t1)
print("*"*100)
for i in range(t1.shape[1]):
    temp_col = t1[:, i]
    # nan == nan -> Ture
    # np.count_nonzero(temp_col != temp_col)返回的是对布尔类型的统计True=1,False=0、
    nan_num = np.count_nonzero(temp_col != temp_col)
    # print(temp_col != temp_col)
    """ 
    [False False False False]   0
    [False False False False]   0  
    [False False False False]   0
    [True False False False]    1
    [True False False False]    1
    [True False False False]    1 
    """
    if nan_num != 0:  # 不为零则说明这一列里面有nan
        # 将有nan的列中的不为nan的元素赋值给temp_not_nan_col
        temp_not_nan_col = temp_col[temp_col == temp_col]
        # 选中当前为nan的位置,把值赋值为不为nan的均值
        temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()


print(t1)

"""
result
[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. nan nan nan nan]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]
****************************************************************************************************
[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. 12. 13. 14. 15.]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]

"""

第五节

numpy与matplotlib结合

美国YTB视频评论的直方图

import numpy as np
from matplotlib import pyplot as plt

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"

t_us = np.loadtxt(us_file_path, delimiter=",", dtype=int)

# 取评论的数据
t_us_comments = t_us[:, -1]

# 选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments <= 1511]

# 组距
d = 50

# 组数 = (max-min)//组距
bin_nums = (t_us_comments.max() - t_us_comments.min()) // 5
print(bin_nums)

# 绘图
plt.figure(figsize=(20, 8), dpi=80)

plt.hist(t_us_comments, bin_nums)
plt.grid(alpha=0.4)
plt.show()

英国YTB视频评论和喜欢的散点图

import numpy as np
from matplotlib import pyplot as plt

uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

t_uk = np.loadtxt(uk_file_path, delimiter=",", dtype=int)

# 选择喜欢的书比50万小的数据
t_uk = t_uk[t_uk[:, 1] <= 500000]
# 错误写法t_uk = t_uk[: , 1] <= 500000 这种写法反馈的是bool类型

# 分别取出喜欢的列,和评论的列
t_uk_comment = t_uk[:, -1]
t_uk_like = t_uk[:, 1]


# 绘图展示
plt.figure(figsize=(20, 8), dpi=80)

plt.scatter(t_uk_like, t_uk_comment)

plt.show()

本文转载于网络 如有侵权请联系删除

相关文章

  • 自动化运维工具Fabric – 智能的执行任务(roles、execute)

    该篇文章来源于Fabric的官方文档,原文为Intelligentlyexecutingtaskswithexecute 注:该功能只在Fabric1.3版本中有效,主要是使用execute功能在Fabric1.3版本中,你可以通过roles来给服务器定义一组角色,然后根据角色使用execute来执行不同的操作。代码一fromfabric.apiimportrun,roles env.roledefs={ 'db':['db1','db2'], 'web':['web1','web2','web3'], } @roles('db') defmigrate(): #Databasestuffhere. pass @roles('web') defupdate(): #Codeupdateshere. pass复制在Fabric<=1.2版本的时候,这唯一让migrate操作在db组服务器生效,upd

  • 定量皮带秤的累计控制器

    5.1控制器类型定量皮带秤的控制器与皮带秤累计器的功能相似,只是多了输出4~20mA的控制功能,定量皮带秤的控制器一般分成二种类型:单机控制器、PLC型控制器。单机控制器目前是以单片机技术为基础的,其结构简单、配置灵活,与定量皮带秤一对一使用,如西门子公司的BW500、申克公司的DISOCONT、INTECONTPLUS、赛默飞世尔科技公司的Micro-Tech3000、日本大和公司的CFC-200、江苏赛摩集团的FH-02-6105B、安徽汇龙公司的HL-820等,其外形有墙装式和盘装式,这是控制器当前最流行的设计。PLC型控制器是以PLC这类在生产过程中广泛使用的控制设备为硬件,通过软件组态实现配料功能,其硬件可靠性高、组态方式灵活,通信方式多样,具有很高的性价比,特别适合定量给料机台数较多、与工艺过程联系紧密的场合,便于与大型PLC、DCS系统无缝连接。5.2单机控制器单机控制器通常具有如下功能:多种运算功能,可将来自承载器的称重信号和皮带速度信号综合,计算出输送的物料瞬时流量和累计值,可对上述值进行物料的湿度和皮带输送机倾角的补偿功能;支持各种主流的工业通信总线,如Profib

  • Linux终端中使用XMLStarlet解析XML

    安装XMLStarlet默认安装在CentOS、Fedora和许多其他现代Linux发行版上,因此只需打开一个终端并键入xmlstarlet即可访问它。如果尚未安装XMLStarlet,您的操作系统会为您安装它。或者,您可以xmlstarlet从包管理器安装命令:$ sudo dnf install xmlstarlet复制使用XMLStarlet解析XML有许多工具旨在帮助解析和转换XML数据,包括允许您编写自己的解析器的软件库和复杂的命令,如fop和xsltproc。不过,有时您不需要处理XML数据;您只需要一种便捷的方式来提取、更新或验证重要数据。对于自发的XML交互,我使用xmlstarlet,这是一个经典的“瑞士军刀”风格的应用程序,可以执行最常见的XML任务。您可以通过运行命令和--help选项来查看它提供的功能:$xmlstarlet--help Usage:xmlstarlet[<options>]<command>[<cmd-options>] where<command>isoneof: ed(oredit)-Edit

  • SAP C4C 围绕以business object为核心的二次开发方式

    BAC:ThefullsetoftheSAPcloudsolution’scapabilitiesareoutlinedinacentralbusinessadaptationcatalog(BAC). Thiscatalogorganizesandstructuresthecapabilitiesintoahierarchyofbusinessareas,packages,topics,andoptions.Solutionscreatedinthestudiorequirebusinessconfigurationcontentthatthenappearsaselements(BACelements)inthecatalogandallowsadministratorstoimplementsolutionsintheproductionenvironment.下图是SAPCloudforCustomerBusinessObjectCustomerQuote的TypeCode字段在repositoryExplorer里的显示:如果要查BusinessTransactionDocu

  • “四川天府健康通”上线仅两周,访问次数破 5 亿

    上线仅两周,“四川天府健康通”已经成为在川人员了解疫情防控情况、出入公共场所的重要工具,其离线码功能也极大的方便了数百万在川老人、儿童的日常出行。日前,在地铁车站,一名老人因无法出示健康码被挡在进站口外。而过去一年,类似的事件频频发生,也引起了社会对老人、儿童等特殊人群的出行关注。四川作为一个65岁及以上常住人口比例超14%的省份,更需要在保证疫情防控力度的同时,兼顾老年人便利出行。关注老幼问题点赞离线码功能“四川天府健康通”在升级发布之初就设置了家庭健康码,方便亲属代为申领。并提供了离线码功能,小程序可以在线生成“离线健康码”并下载、打印,老人、儿童可以随身携带,在7天有效期内使用。自1月11日上线以来,“四川天府健康通”微信小程序累计访问次数4.8亿次,用户数已超4000万。离线码功能也累积访问次数超250万,近200万的老人、儿童凭借离线码的申领,提高出行效率。王大爷家住四川绵阳我儿子给我买了手机,也教了我怎么用健康码,但一出门就忘记,每次乘车都要拜托年轻人帮我操作。现在,我出门只要带着纸质版的离线码,出示之后就能正常出行,十分方便。此外,离线码还具有防伪功能,可以通过扫一扫功能

  • 10月份Github上最热门的开源项目

    开源最前线(ID:OpenSourceTop)猿妹整编 转载请注明来源作者10月份GitHub上最热门的Java开源项目排行已经出炉啦,一起来看看上榜详情吧:1base-adminhttps://github.com/huanzi-qch/base-adminStar1499BaseAdmin一套简单通用的后台管理系统,这套BaseAdmin是一套简单通用的后台管理系统,主要功能有:权限管理、菜单管理、用户管理,系统设置、实时日志,实时监控,API加密,以及登录用户修改密码、配置个性菜单等2NewPipehttps://github.com/TeamNewPipe/NewPipeStar11307NewPipe是一款Android下的第三方YouTube客户端,支持画中画、后台播放、变速播放、可查看留言、可导入订阅频道、可使用Kodi播放,是一款功能非常完善的油管客户端。3Auto.jshttps://github.com/hyb1996/Auto.jsStar8415Auto.js是一款强大的不需要root的类似与按键精灵的软件,可以让你跟电脑中按键精灵一样实现自动点击,打开应用等等

  • Flutter实现页面切换后保持原页面状态的3种方法

    前言:在Flutter应用中,导航栏切换页面后默认情况下会丢失原页面状态,即每次进入页面时都会重新初始化状态,如果在initState中打印日志,会发现每次进入时都会输出,显然这样增加了额外的开销,并且带来了不好的用户体验。 在正文之前,先看一些常见的App导航,以喜马拉雅FM为例:它拥有一个固定的底部导航以及首页的顶部导航,可以看到不管是点击底部导航切换页面还是在首页左右侧滑切换页面,之前的页面状态都是始终维持的,下面就具体介绍下如何在flutter中实现类似喜马拉雅的导航效果第一步:实现固定的底部导航在通过fluttercreate生成的项目模板中,我们先简化一下代码,将MyHomePage提取到一个单独的home.dart文件,并在Scaffold脚手架中添加bottomNavigationBar底部导航,在body中展示当前选中的子页面。///home.dart import'package:flutter/material.dart'; import'./pages/first_page.dart'; import'./pa

  • 《数字集成电路静态时序分析基础》笔记⑧

    网络课程《数字集成电路静态时序分析基础》的笔记 地址:https://www.iccollege.cn/portal/courseDetail/193.mooc多周期半周期伪路径多周期路径通常对于普通路径来说,路径延迟是T,但是某些情况下,中间延迟远远大于一个周期T。建立时间检查多周期时序约束一个简单的例子,对于多周期路径,建立时间检查边沿会推到第三个周期多周期时序路径,launchpath和普通的没有区别而capturedpath有些不一样,clockCLKM的incr达到了30,也就是三个周期。保持时间检查对于hold来说,如果按照默认的边沿,所需要保持的时间就会非常长,过于严格,通过下面的约束可以将保持时间检查边沿向前移动两个边沿。保持时间报告默认的话,clockCLKP应该是20(建立时间检查边沿前一个),由于设置了前面的约束,变成0了。如果建立时间多周期约束了N,而保持时间N-1没有设定,那么会发生什么?时序路径就会变化,launchpath没有变化,主要是capturepath变化了clockCLKP变成了20,时序不满足。半周期路径普通路径的触发时钟边沿是一致的,对于一个

  • WebAssembly编程实践(1.4) 编译目标及编译流程

    事实上Emscripten的诞生早于WebAssembly,在WebAssembly标准出现前的很长一段时间内,Emscripten的编译目标是asm.js。自1.37.3起,Emscirpten才开始正式支持WebAssembly。以asm.js为编译目标时,C/C++代码被编译为.js文件;以WebAssembly为编译目标时,C/C++代码被编译为.wasm文件及对应的.js胶水代码文件。两种编译目标从应用角度来说差别不大——它们使用的内存模型、函数导出规则、JavaScript与C相互调用的方法等都是一致的。我们在实际使用中遇到的主要区别在于模块加载的同步和异步:当编译目标为asm.js时,由于C/C++代码被完全转换成了asm.js(JavaScript子集),因此可以认为模块是同步加载的;而以WebAssembly为编译目标时,由于WebAssembly的实例化方法本身是异步指令,因此模块加载为异步加载。以asm.js为目标的工程切换至WebAssembly时,容易发生Emscritpen运行时未就绪时调用了Module功能的问题,需要按照1.3.3的方法予以规避。自1.3

  • PHP开发微信公共平台(验证token)ZendFramework

    define('TOKEN','3FC50DEAED1083F162BB3D36FF053709'); //这个是TOKEN,我用的是一个字符串的MD5 $signature=$this->_request->getParam('signature',''); //微信加密签名,可以用$_GET['signature'] $timestamp=$this->_request->getParam('timestamp','');//时间戳 $nonce=$this->_request->getParam('nonce','');//随机数 $echostr=$this->_request->getParam('echostr','');//随机字符串 /* *加密/校验流程: *1.将token、timestamp

  • 腾讯云应用合规平台返回结果调用方式

    注意:目前只要请求被服务端正常处理了,响应的HTTP状态码均为200。例如返回的消息体里的错误码是签名失败,但HTTP状态码是200,而不是401。 正确返回结果以云服务器的接口查看实例状态列表(DescribeInstancesStatus)2017-03-12版本为例,若调用成功,其可能的返回如下为:{ "Response":{ "TotalCount":0, "InstanceStatusSet":[], "RequestId":"b5b41468-520d-4192-b42f-595cc34b6c1c" } }复制 Response及其内部的RequestId是固定的字段,无论请求成功与否,只要API处理了,则必定会返回。 RequestId用于一个API请求的唯一标识,如果API出现异常,可以联系我们,并提供该ID来解决问题。 除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的TotalCount和InstanceStatus

  • java实训作业----IO流

    importjava.io.*; publicclassFileTest{ publicstaticvoidmain(String[]args){ //TODO自动生成的方法存根 Filefile=newFile("data.txt"); Strings="12345abcdef@#%&*软件工程"; try{ FileWriterte=newFileWriter(file); BufferedWriterout=newBufferedWriter(te); out.write(s); out.close(); te.close(); }catch(Exceptione){ e.printStackTrace(); } try{ FileReaderfr=newFileReader(file); BufferedReaderin=newBufferedReader(fr); Stringlen=in.readLine(); System.out.println("文件中的信息是:"+len); in.close(); fr.close(); }catch(Exceptio

  • Databricks 第11篇:Spark SQL 查询(行转列、列转行、Lateral View、排序)

    本文分享在AzureDatabricks中如何实现行转列和列转行,并介绍对查询的结果进行排序的各种方式。 一,行转列 在分组中,把每个分组中的某一列的数据连接在一起: collect_list:把一个分组中的列合成为数组,数据不去重,格式是['a','a','b'] collect_set:把一个分组中的列合成为集合,数据去重,格式是['a','b'] 用于连接文本数组的函数,通过sep把数组中的item分割开,连接成一个字符串: concat_ws(sep,[str|array(str)]+)复制 举个例子,把每个用户的game,通过逗号连接起来: selectuid ,concat_ws(",",collect_list(game))asgame_list fromuser_game复制 二,列转行 Explode(expr)用于处理array和map结构的数据,把一行的列值转换成多行,该函数产生一个虚拟表,包含一行或多行数据,也就是说,Explode(expr)函数把array类型expr中的元素分成多行,或者将map类型的expr中的元素分成多行和多列。 举个例子

  • 导航栏

    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>代码简洁的滑动门(tab)jquery插件-懒人建站</title><metaname="keywords"content="jquery特效,JS代码,js特效代码大全,导航菜单代码,焦点幻灯片,企业网页设计欣赏"/><metaname="description"content="懒人建站为您提供-基于jquery特效,jquery弹出层效果,js特效代码大全,JS广告代码,导航菜单代码,下拉菜单代码和jquery焦点图片代码。"/&

  • x01.editor: 语法高亮编辑器

    学习《TkinterGUIProgrammingByExample》时,发现了语法高亮编辑器和聊天程序还不错。语法高亮编辑器如下,聊天程序可在下载中获取。 1.效果图 2.代码 importos,sys CurrDir=os.path.dirname(__file__) sys.path.append(CurrDir) importtkinterastk importtkinter.ttkasttk importtkinter.messageboxasmsgbox importitertools fromtkinterimportfiledialog fromeditor.coreimportTextArea,LineNumbers,FindWindow,Highlighter,R classMainWindow(tk.Tk): def__init__(self): super().__init__() self.title("x01.editor") self.text_area=TextArea(self,bg="white",fg="black",undo=Tru

  • 『Python』进程同步

    1.Lock(互斥锁) 是可用的最低级的同步指令。Lock处于锁定状态时,不被其他的线程拥有。 frommultiprocessingimportProcess,Value,Lock deffunc1(num,lock:Lock): lock.acquire() print(num.value) num.value+=1 lock.release() if__name__=='__main__': lock=Lock()#创建锁对象 val=Value('i',0) proc=[Process(target=func1,args=(val,lock))foriinrange(10)] forpinproc: p.start() forpinproc: p.join() print(val.value)#10 复制 上面获取锁和释放锁可以用with语句简化,它可以自动获取和释放锁 deffunc1(num,lock): withlock: num.value+=1 复制 输出: 0 1 2 3 4 5 6 7 8 9 10 复制 2.RLock(递归锁) 是一个可以被同一

  • C# 快速排序--二分查找法--拉格朗日插值法

    1.快速排序  参考自:https://www.cnblogs.com/yundan/p/4022056.html namespace快速排序算法 { classProgram { staticvoidMain(string[]args) { Console.WriteLine("请输入待排序数列以,分割"); string_s=Console.ReadLine(); string[]_sArray=_s.Split(",".ToCharArray()); int_nLength=_sArray.Length; int[]_nArray=newint[_nLength]; for(inti=0;i<_nLength;i++) { _nArray[i]=Convert.ToInt32(_sArray[i]); } varlist=_nArray.ToList(); QuickSort(list,0,_nLength-1); foreach(variinlist) { Console.WriteLine(i.ToString()); } Console.ReadLin

  • elasticsearch 初步

    本文主要内容: 1、elasticsearch的认识(是个啥,能干啥) 2、安装启动、简单集群及关键配置 3、名词解释 4、存取数据,中文分词 --------------------------------------------------------------------------------------------------- 1、elasticsearch的认识   elasticsearch是一个开源的实时分布式搜索分析引擎,底层使用lucene实现。lucene使用较为复杂,es将其做成一个单独的服务,方便开发人员使用。这么说不太方便理解,通俗的讲,可以把它理解成一个分布式的海量数据库,而且使用方便。   比较详细的介绍可以参考官网的文档以及权威指南:   官网文档描述:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/getting-started.html   es权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/

  • Linux : Ubuntu 安装 RabbitMQ

    安装Erlang:手动编译(不推荐)http://www.erlang.org/downloads下载源码如22版本:http://erlang.org/download/otp_src_22.0.tar.gz apt-getupdate更新源 apt-get-finstallgccapt-getinstallncurses-devel如果没有就安装apt-getinstalllibncurses-devapt-getinstallmake ./configure-prefix=/opt/erlangmakemakeinstall 环境变量exportERLANG_HOME=/opt/erlangexportPATH=$PATH:$ERLANG_HOME/binsource/etc/profile 安装Erlang:自动安装使用esl_erlang先apt-getupdate更新源然后下面链接下载debhttps://www.erlang-solutions.com/resources/download.html下载deb包之后dpkg-iesl-erlang_22.0.2-1~ubu

  • 数据流导向

    数据流重导向 .wiz-editor-body.wiz-code-container{position:relative;padding:8px0;margin:5px0;text-indent:0;text-align:left} .CodeMirror{font-family:Consolas,"LiberationMono",Menlo,Courier,monospace;color:rgba(0,0,0,1);font-size:0.875rem} .wiz-editor-body.wiz-code-container.CodeMirrordiv{margin-top:0;margin-bottom:0} .CodeMirror-lines{padding:4px0} .CodeMirrorpre{padding:04px} .CodeMirrorpre.CodeMirror-line{min-height:24px} .CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:rgba(255

  • Pycharm专业版下载

        PyCharm官网最新版是一款完整的IDE集成开发环境,PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。 软件特色: 1、更富有成效PyCharm负责日常工作,节省时间。专注于更大的事物,并采用以键盘为中心的方法,以充分利用PyCharm的众多生产力功能。2、获得智能帮助PyCharm知道你的代码的一切。依靠智能代码完成,动态错误检查和快速修复,简单的项目导航等等。3、提升代码质量编写整洁且可维护的代码,同时IDE可帮助您通过PEP8检查,测试帮助,智能重构和大量检查来控制质量。4、只需你所需要的一切PyCharm由程序员为程序员设计,提供高效Python开发所需的所有工具。5、智能Python协助PyCharm提供智能代码完成,代码检查,动态错误突出显示和快速修复,以及自动代码重构和丰富的导航功能。6、Web

相关推荐

推荐阅读