1. 程式人生 > >python :numpy函式

python :numpy函式

一、陣列相關的其他函式

1、求階乘

語法:np. prod()

#隨機建立一個數組
arr = np.array(np.arange(1,6))
#計算陣列的階乘
np.prod(arr)

2.計算陣列元素的累積乘積

語法:np. cumprod()

np.cumprod(arr)

3.陣列的修剪

語法:ndarray.clip()
np.ndarray.clip(min,max):大於max的值會被重設成max,小於min的值會被重設成min;不指定min max預設為min 可以只選一個 也可以都選

#建立一個數組
arr1=np.arange(
10) #修剪陣列 arr1.clip(2,5) #給定一個最小值2,最大值5,所有比2小的值都變成2(最小值),所有比5大的值都變成5(最大值)
array([2, 2, 2, 3, 4, 5, 5, 5, 5, 5])

4.陣列的壓縮

語法:ndarray.compress()
返回一個根據給定條件篩選後的陣列,用於資料的篩選

# 陣列的壓縮 ndarray.compres() :返回一個根據給定條件 篩選後的陣列
scores = np.random.randint(60,100,9)  # 60-100以內的隨機數9個
#輸出score陣列中大於90的數
mark = scores>
90 # 輸出的是布林值 #法一: scores[mark] #輸出的是大於90的值 #法二: scores.compress(mark)

5.求和

語法:np.sum()

# 求和 np.sum()
np.sum(scores)

二、日期處理函式-datetime模組

在這裡插入圖片描述

import numpy as np
from datetime import datetime

1.datatime. strptime(‘指定日期’,’格式字串’)

str='2018-10-01 08:09:10.11'
time1=datetime.strptime(str,'%Y-%m-%d %H:%M:%S.%f'
) time1
datetime.datetime(2018, 10, 1, 8, 9, 10, 110000)

將日期轉換為字串

# 將日期轉化為字串
str1 = time1.strftime('%Y-%m-%d %H:%M:%S.%f')
str1
'2018-10-01 08:09:10.110000'

2.獲取date型別

只能獲取年月日

time1.date()
datetime.date(2018, 10, 1)

獲取time1的時分秒

time1.time()
datetime.time(8, 9, 10, 110000)

3.獲取星期幾

time1.weekday() #10月1號是週一,下標為0
#真實的周幾,從1開始 isoweekday()
time1.isoweekday()

4.獲取年、月、日、時、分、秒、毫秒、當前時間

time1.year#年
time1.month#月
time1.day #日
time1.hour#小時
time1.minute#分
time1.second#秒
time1.microsecond#微秒
nowtime=datetime.now() #當前時間 

注意:獲取年~微秒都沒有加括號

5.直接生成指定日期

nextyear=datetime(2019,2,5) #只有年月日有值

6.計算時間差

nextyear-nowtime #計算時間差
datetime.timedelta(116, 16934, 726639)

只有三個引數,第一個引數是days(天),第二個引數是seconds(秒),第三個引數是microseconds(毫秒)

(nextyear-nowtime).days #時間差按天數計算
(nextyear-nowtime).seconds #時間差按秒計算
(nextyear-nowtime).microseconds # 時間差顯示毫秒

7.時間間隔

from datetime import timedelta #匯入模組
time_d=timedelta(10,0,0)#引數是 天,秒,毫秒
nowtime+time_d  #現在的時間加上一個時間間隔

三、案例

獲取給定時間範圍內交易日週一、週二、週三、週四、週五分別對應的平均收盤價及哪天的平均收盤價最高,哪天的平均收盤價最低。
步驟:
1.將給定的日期轉換 datetime.strptime()
2.求出日期對應是星期幾
3.處理data.csv檔案中的日期
4.分別求出各星期的平均收盤價
5.比較高低

1-2步:

#日期是  日-月-年,定義一個函式,將字串型別的資料轉換為datetime型別.並且返回是周幾的數字.
#因為我的CSV檔案是gbk編碼的,所以我在後加上了decode('utf-8')
def weekdayNum(datestr):
    return datetime.strptime(datestr.decode('utf-8'),'%d-%m-%Y').isoweekday()

3-4步:
讀取資料 loadtxt 引數 converters = {colNum(第幾列):函式名}

#讀取資料 讀取檔案的時候,原始檔是什麼編碼比較重要,預設是gbk,如果原始檔是utf-8,則要加上 encoding='utf-8'
#如果原始檔不是utf-8,記得讀取的字串需要解碼,在函式處解決問題即可。
dates,close = np.loadtxt('data.csv',delimiter=',',unpack=True,usecols=(1,-2),
                         skiprows=1,converters={1:weekdayNum}) # 對第一列的資料使用weekdayNum 這個函式 轉化為星期幾,一般使用converters引數都要定義函式。
#現在我們要將週一、週二、週三、週四、週五的收盤價分別打包起來
#建立一個數組來存週一~週五的值
averages = np.zeros(5)
#遍歷週一-週五的所有資料
for i in range(1,6):
    #獲取每個數1-5在原始資料中的下標
    indices=np.where(dates==i)
#     print(i,indices)
    #獲取結果集
#     result = np.take(close,indices)  #法一
#     result=close[indices]#法二
    result = close.compress(dates==i) #法三
    
    print(result)
    averages[i-1]=np.mean(result)
    

5步:
使用np.argmax() 和np.argmin() 獲取最大值和最小值對應的下標

maxIndex=np.argmax(averages)
minIndex=np.argmin(averages)
print('一週中星期',maxIndex+1,'平均收盤價最高')
print('一週中星期',minIndex+1,'平均收盤價最低')