第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
Numpy 副本與視圖

視圖是指對數(shù)據(jù)的引用,通過該引用亦便可訪問、操作原有數(shù)據(jù),但原有數(shù)據(jù)不會產(chǎn)生拷貝。如果我們對視圖進行修改,它會影響到原始數(shù)據(jù),物理內(nèi)存在同一位置。副本是一個數(shù)據(jù)的完整的拷貝,如果我們對副本進行修改,它不會影響到原始數(shù)據(jù),物理內(nèi)存不在同一位置。視圖一般發(fā)生在:Numpy 的切片操作返回原數(shù)據(jù)的視圖;調(diào)用 ndarray 的 view() 函數(shù)產(chǎn)生一個視圖。副本一般發(fā)生在:在對 Python 序列進行切片操作時,同時調(diào)用 deepcopy() 函數(shù);調(diào)用 ndarray (或其切片)的時候,同時調(diào)用 copy() 函數(shù)產(chǎn)生一個副本。

4.8 純函數(shù)與副作用

所謂純函數(shù),就是沒有副作用的函數(shù)一個函數(shù)從執(zhí)行開始到結(jié)束,沒有對外部環(huán)境做任何操作,即對外部環(huán)境沒有任何影響(沒有副作用),這樣的函數(shù)就是純函數(shù)。純函數(shù)只負(fù)責(zé)輸入輸出,對于一種輸入只有一種函數(shù)返回值。如果函數(shù)中存在 Math.random 這種影響返回值的函數(shù),也不能算是純函數(shù)。// 純函數(shù)function add(a, b) { return a + b;}// 非純函數(shù)var person = { name: '小明' };function changeName { person.name = '小紅'; // 影響了函數(shù)外的內(nèi)容,產(chǎn)生了副作用}

3.2 lineTo(x, y)

lineTo 方法主要作用是打線到指定點,它不會創(chuàng)建線條。通過字面意思我們也可以知道,“l(fā)ine: 路線”,“to: 到… 地方”,整體意思就是路線引到某個坐標(biāo)。參數(shù)說明:變量名類型是否必須說明 xNumber 是 canvas 畫布上相對于原點所繪制的矩形的左上角的 X 坐標(biāo)。yNumber 是 canvas 畫布上相對于原點所繪制的矩形的左上角的 Y 坐標(biāo)。

3.1 moveTo(x, y)

moveTo 方法主要作用是把畫筆路徑移動到畫布中的指定點,它不會創(chuàng)建線條。通過字面意思我們也可以知道,“move: 移動”,“to: 到… 地方”,整體意思就是移動到某個坐標(biāo)。參數(shù)說明:變量名類型是否必須說明 xNumber 是 canvas 畫布上相對于原點所繪制的矩形的左上角的 X 坐標(biāo)。yNumber 是 canvas 畫布上相對于原點所繪制的矩形的左上角的 Y 坐標(biāo)。

3.2 使用副本開始配置

要使用其他配置的副本開始定義運行/調(diào)試配置,請按以下步驟操作:打開 Run/Debug Configurations 對話框;在左側(cè)窗格中選擇現(xiàn)有的運行/調(diào)試配置;點擊 Copy Configuration 圖標(biāo) ;在 Name 字段中輸入一個名稱;根據(jù)需要修改配置;請務(wù)必更正在此對話框底部顯示的所有錯誤;點擊 OK。

1.1 使用 yum install -y git 命令安裝

如果你的版本是 Red Hat,也就是我們所說的紅帽,那么可以使用如下命令安裝:yum install -y git安裝完畢,需要配置 Git 全局標(biāo)識:git config --global user.name "Your Name"git config --global user.email "Your Email"將 “Your Name” 和 “Your Email” 替換為你的用戶名和郵箱即可。附:安裝步驟視頻。可以看到,我的版本是 Red Hat 4.8.5-39。我將安裝操作錄了視頻,如下:151

3.1 ndarray.copy()

ndarray.copy() 函數(shù)創(chuàng)建一個副本。 對副本數(shù)據(jù)進行修改,不會影響到原始數(shù)據(jù),它們物理內(nèi)存不在同一位置。案例創(chuàng)建數(shù)組 a,并產(chǎn)生 a 的副本,記為 b:a = np.array([[0,1], [2,3], [4,5]])b = a.copy()判斷 a 和 b 是否具有同一性:b is aout: False可以看到,a 和 b 互相獨立,這和賦值顯然不同。對副本進行修改,觀察原始數(shù)組:b[0,0]=100print("修改后的數(shù)組b:", b)print("原始數(shù)組a:", a)打印結(jié)果為:修改后的數(shù)組b: [[100 1] [ 2 3] [ 4 5]]原始數(shù)組a: [[0 1] [2 3] [4 5]]可以發(fā)現(xiàn),副本產(chǎn)生的變化,并不會對原始數(shù)組產(chǎn)生影響。

1. 值傳入

值傳入是在函數(shù)調(diào)用過程中,將原函數(shù)的數(shù)值復(fù)制一份后,將副本再傳入調(diào)用的函數(shù)中。在函數(shù)中操作的都是副本的數(shù)值。對原有函數(shù)中的原變量是沒有影響的。

2.1 塊引用

在 Markdown 文件中,用「大于號」開頭的行會被轉(zhuǎn)換為塊引用。實例 1:這是一段普通的文本內(nèi)容。“一支穿云箭,千軍萬馬來相見;兩副忠義膽,刀山火海提命現(xiàn)?!? —— 星仔其默認(rèn)渲染效果如下實例 2:在行首加入「大于號 >」,將其改變?yōu)閴K引用。> “一支穿云箭,千軍萬馬來相見;兩副忠義膽,刀山火海提命現(xiàn)?!? —— 星仔其修改后渲染效果如下:實例 3:如果需要在塊引用內(nèi)的換行,可以在行尾增加兩個連續(xù)的空格。> 一支穿云箭,千軍萬馬來相見; > 兩副忠義膽,刀山火海提命現(xiàn)。 > —— 星仔其渲染效果如下:實例 4:這一寫法還可以簡化成只在第一行加入引用符號。> 一支穿云箭,千軍萬馬來相見; 兩副忠義膽,刀山火海提命現(xiàn)。 —— 星仔其渲染效果與以前一樣:實例 5:如果需要在塊引用里分段,只要在塊引用內(nèi)增加由塊引用符號開啟的空行即可。> 一支穿云箭,千軍萬馬來相見;>> 兩副忠義膽,刀山火海提命現(xiàn)。>> —— 星仔其渲染結(jié)果如下:塊引用會被渲染成 html 的 blockquote 標(biāo)簽:<blockquote><p>"一支穿云箭,千軍萬馬來相見;兩副忠義膽,刀山火海提命現(xiàn)。" —— 星仔</p></blockquote>

4.1 closePath(x, y)

closePath() 方法主要作用是創(chuàng)建從筆觸當(dāng)前點到 moveTo 的點的路徑,它的優(yōu)勢在于會自動處理接口閉合的問題。同學(xué)們可以用前面學(xué)過的知識繪制一個三角形,深刻體會一下 closePath() 的不同之處。

3.1 beginPath(x, y)

beginPath() 方法主要作用是開始一個新的路徑,它是下次 stroke 的起始位置,下次 stroke 的時候就不會重新繪制 beginPath 之前的內(nèi)容了。

4. 小結(jié)

本小節(jié)講解了視圖和副本的概念和區(qū)別。副本是對原始數(shù)組的完整拷貝,二者互相獨立,并不互相影響,但是物理內(nèi)存的開銷會加倍。而視圖(切片)是對原始數(shù)據(jù)的一種映射,物理內(nèi)存的開銷相對小一些;對視圖(切片)的元素更改,會相應(yīng)地反映到原始數(shù)組中,這是二者最大的區(qū)別。

1. 簡介

官方解釋:title 即標(biāo)題組件,包含主標(biāo)題與副標(biāo)題,ECharts 3.0 版本后支持多個標(biāo)題組件。慕課解釋:標(biāo)題組件對應(yīng)下圖紅色框部分:title 組件使用頻率比較高,功能也比較完備,除了可以自定義樣式、位置等基礎(chǔ)功能外,還支持超鏈接模式,主標(biāo)題、副標(biāo)題功能等,下面展開討論。

1. 案例演示

Tips:示例程序在 GCC 7.5.0 下測試通過,請大家使用支持 C99 標(biāo)準(zhǔn)的編譯器。# include <stdio.h># include <stdbool.h>int main(){ bool x,y,z; x=false; y=true; printf("x = %d; y = %d\n",x,y); z=x||y; printf("x || y = %d\n",z); z=x&&y; printf("x && y = %d\n",z); printf("!x = %d\n",!x); printf("!y = %d\n",!y); return 0;}運行結(jié)果x = 0; y = 1x || y = 1x && y = 0!x = 1!y = 0從實際的程序可以看到,和我們上一節(jié)中介紹的表格中的運算結(jié)果是一致的。如果不使用布爾類型,直接使用整數(shù)會怎樣?下面我就通過實際的程序來看一下結(jié)果。# include <stdio.h>int main(){ int x,y,z; x=0; y=10; printf("x = %d; y = %d\n",x,y); z=x||y; printf("x || y = %d\n",z); z=x&&y; printf("x && y = %d\n",z); printf("!x = %d\n",!x); printf("!y = %d\n",!y); return 0;}運行結(jié)果x = 0; y = 10x || y = 1x && y = 0!x = 1!y = 0雖然由布爾類型變?yōu)榱苏麛?shù)類型,但是最后的結(jié)果是一致的。這也就是 C 語言在出現(xiàn)布爾類型之前經(jīng)常用到的形式。

1.1 標(biāo)題 title

title 組件用于渲染圖表的標(biāo)題,含主標(biāo)題、副標(biāo)題兩部分。 title 組件支持配置位置、文本樣式、鏈接模式等,詳情可參考 Echarts 標(biāo)題 title 一節(jié)。

3. 實例

#include <stdio.h>int main(){ int x, y; x = 0; y = 10; printf("%s\n", (x > y) ? "x > y" : "x < y"); return 0;}運行結(jié)果:x < y這個語句還可以配合賦值語句使用,給變量賦值。#include <stdio.h>int main(){ int x, y, z; x = 0; y = 10; z = (x > y) ? 20 : 50; printf("%d\n", z); return 0;}運行結(jié)果:50我們在講述 C 語言邏輯運算的時候知道了,在 C 語言中,即使引入了布爾類型,但是在使用 printf 函數(shù)輸出的時候,也是沒有辦法來直接輸出布爾類型的,只能是通過輸出整除類型來替代。如果我們想直接輸出布爾類型,可以通過編寫一個小的程序來擴展輸出,將 0 和 1 直接替換為 false 和 true 輸出。但是這樣做如果輸出次數(shù)很多是值得寫這樣一個程序的,要是只是像我們測試或者只是單次輸出,那么就顯得有些復(fù)雜了。這時候,我們這次介紹的三目運算符就有用武之地了。#include <stdio.h>#include <stdbool.h>int main(){ bool x, y, z; x = false; y = true; printf("x = %s; y = %s\n", x ? "true" : "false", y ? "true" : "false"); z = x || y; printf("x || y = %s\n", z ? "true" : "false"); z = x && y; printf("x && y = %s\n", z ? "true" : "false"); printf("!x = %s\n", !x ? "true" : "false"); printf("!y = %s\n", !y ? "true" : "false"); return 0;}運行結(jié)果:x = false; y = truex || y = truex && y = false!x = true!y = false在上面的代碼中每個 printf 函數(shù)都使用了本節(jié)介紹的三目運算符。其實就是在每個 printf 函數(shù)里都內(nèi)置了一個判斷語句。這個判斷語句會根據(jù)傳入的變量的值來進行判斷,分別用 true 和 false 來替換 1 和 0 ,這樣就可以實現(xiàn)布爾值的輸出了。

2.2 運算符

2.2.1 四則運算符四則運算符是理工運算中的基礎(chǔ),主要包含加減乘除和絕對值運算。實例 3:四則運算符號匯總。加法符號:$x+y=z$ 減法符號:$x-y=z$ 加減符號:$x \pm y=z$ 減加符號:$x \mp y=z$ 叉乘符號:$x \times y=z$ 點乘符號:$x \cdot y=z$ 星乘符號:$x \ast y=z$ 除法符號:$x \div y=z$ 斜除符號:$x/y=z$ 分式1:$\frac{x+y}{y+z}$ 分式2:${x+y} \over {y+z}$ 絕對值:$|x+y|$ 其渲染效果如下:2.2.2 邏輯運算符實例 4:邏輯運算符號匯總。等于符號:$x+y=z$ 大于符號:$x+y>z$ 小于符號:$x+y<z$ 大于等于符號:$x+y \geq z$ 小于等于符號:$x+y \leq z$ 不等于符號:$x+y \neq z$ 不大于等于符號:$x+y \ngeq z$ 不大于等于符號:$x+y \not\geq z$ 不小于等于符號:$x+y \nleq z$ 不小于等于符號:$x+y \not\leq z$ 約等于符號:$x+y \approx z$ 恒定等于符號:$x+y \equiv z$ 其渲染效果如下:2.2.3 高等運算符實例 5:高等運算符號匯總。平均數(shù)符號:$\overline{xyz}$ 開二次方符號:$\sqrt x$ 開方符號:$\sqrt[3]{x+y}$ 對數(shù)符號:$\log(x)$ 極限符號:$\lim^{x \to \infty}_{y \to 0}{\frac{x}{y}}$ 極限符號:$\displaystyle \lim^{x \to \infty}_{y \to 0}{\frac{x}{y}}$ 求和符號:$\sum^{x \to \infty}_{y \to 0}{\frac{x}{y}}$ 求和符號:$\displaystyle \sum^{x \to \infty}_{y \to 0}{\frac{x}{y}}$ 積分符號:$\int^{\infty}_{0}{xdx}$ 積分符號:$\displaystyle \int^{\infty}_{0}{xdx}$ 微分符號:`\partial`,如:$\frac{\partial x}{\partial y}$ 矩陣符號:$\left[ \begin{matrix} &1 &2 &\cdots &4 &5 &6 &\cdots &8\\ &\vdots &\ddots &\cdots &13 &14 &15 &\cdots &16\end{matrix} \right]$其渲染效果如下:

2. ThreadLocal 概述

誕生:早在 JDK 1.2 的版本中就提供 java.lang.ThreadLocal,ThreadLocal 為解決多線程程序的并發(fā)問題提供了一種新的思路。使用這個工具類可以很簡潔地編寫出優(yōu)美的多線程程序。概述:ThreadLocal 很容易讓人望文生義,想當(dāng)然地認(rèn)為是一個 “本地線程”。其實,ThreadLocal 并不是一個 Thread,而是 Thread 的局部變量,也許把它命名為 ThreadLocalVariable 更容易讓人理解一些。當(dāng)使用 ThreadLocal 維護變量時,ThreadLocal 為每個使用該變量的線程提供獨立的變量副本,所以每一個線程都可以獨立地改變自己的副本,而不會影響其它線程所對應(yīng)的副本??傮w概括:從線程的角度看,目標(biāo)變量就象是線程的本地變量,這也是類名中 “Local” 所要表達(dá)的意思。了解完 ThreadLocal 的總體介紹后,對其有了一個總體的了解,那我們接下來繼續(xù)探究 ThreadLocal 的真實面貌以及使用。

1.3 for 循環(huán)嵌套

列表推導(dǎo)中允許 for 循環(huán)嵌套,它的語法定義如下:[expression for x in X for y in Y]可以認(rèn)為它使用如下代碼創(chuàng)建了一個 list:list = []for x in X: for y in Y: list.append(expression)使用列表推導(dǎo)生成一個包含兩個字符的字符串列表,代碼如下:>>> [x + y for x in 'ABC' for y in 'XYZ']['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']等價于使用 append 方法創(chuàng)建列表,代碼如下:>>> list = []>>> for x in 'ABC':... for y in 'XYZ':... list.append(x + y)...>>> list['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']在第 1 行,創(chuàng)建了一個空列表在第 2 行,在外循環(huán)中,遍歷字符串 ‘ABC’ 中的 3 個字符 ‘A’、‘B’ 和 ‘C’,循環(huán)變量 x 依次為’A’、‘B’ 和 ‘C’在第 3 行,在內(nèi)循環(huán)中,遍歷字符串 ‘XYZ’ 中的 3 個字符 ‘X’、‘Y’ 和 ‘Z’,循環(huán)變量 y 依次為’X’、‘Y’ 和 ‘Z’在第 4 行,將表達(dá)式 x + y 作為元素添加到列表中

2. 命名空間的本質(zhì)

命名空間本質(zhì)上就是一個對象,將其內(nèi)部的變量組織到這個對象的屬性上:namespace Calculate { const fn = (x: number, y: number) => x * y export const add = (x: number, y:number) => x + y}來看其編譯后的結(jié)果:"use strict";var Calculate;(function (Calculate) { var fn = function (x, y) { return x * y; }; Calculate.add = function (x, y) { return x + y; };})(Calculate || (Calculate = {}));那么,我們就可以訪問 Calculate 對象上的 add 屬性了:Calculate.add(2, 3)命名空間主要是為解決全局作用域內(nèi)重名問題,而這一問題隨著模塊化編程的使用,已經(jīng)得到了解決。

3.2 merge() 方法

方法原型: public Object merge(Object object); merge() 方法和 persist() 方法類似, 區(qū)別在于:merge() 方法接收一個 PO 作為參數(shù),創(chuàng)建并返回此 PO 的副本對象;此副本對象具有對象持久化能力。這一點是 merge() 方法與其他方法最大的不同。上一段實例:try{ transaction = session.beginTransaction(); //查詢出來的stu具有持久化能力 Student stu = (Student) session.get(Student.class, new Integer(2)); //轉(zhuǎn)stu對象持久化狀態(tài)轉(zhuǎn)變成游離狀態(tài) session.clear(); //stu_對象具有持久化能力 Student stu_ = (Student) session.merge(stu); //這個操作不能同步到數(shù)據(jù)庫 stu.setStuName("我已經(jīng)不具有持久化能力"); //這個操作能同步到數(shù)據(jù)庫 stu_.setStuName("我具有持久化能力"); transaction.commit();} catch(Exception e) { transaction.rollback();} finally { session.close();} merge() 方法返回的 stu 對象的副本 stu_,此對象具有持久化能力。執(zhí)行下面代碼,數(shù)據(jù)能同步到數(shù)據(jù)庫中。stu_.setStuName("我具有持久化能力"); Session 中提供的每一個方法都有其實際意義。特別是 merge() 方法,既可以保護原對象中的數(shù)據(jù)不被污染,又能行使數(shù)據(jù)庫同步操作。在很多場景里都會有這個需求。

2. 函數(shù)類型

在 TypeScript 中編寫函數(shù),需要給形參和返回值指定類型:const add = function(x: number, y: number): string { return (x + y).toString()}代碼解釋:參數(shù) x 和 y 都是 number 類型,兩個參數(shù)相加后將其類型轉(zhuǎn)換為 string, 所以整個函數(shù)的返回值為 string 類型。上面的代碼只是對 = 等號右側(cè)的匿名函數(shù)進行了類型定義,等號左側(cè)的 add 同樣可以添加類型:const add: (x: number, y: number) => string = function(x: number, y: number): string { return (x + y).toString()}可以看到,等號左側(cè)的類型定義由兩部分組成:參數(shù)類型和返回值類型,通過 => 符號來連接。這里要注意:函數(shù)類型的 => 和 箭頭函數(shù)的 => 是不同的含義。通過箭頭函數(shù)改寫一下剛才寫的函數(shù):const add = (x: number, y: number): string => (x + y).toString()等號左右兩側(cè)書寫完整:// 只要參數(shù)位置及類型不變,變量名稱可以自己定義,比如把兩個參數(shù)定位為 a bconst add: (a: number, b: number) => string = (x: number, y: number): string => (x + y).toString()

3. 語法

通用坐標(biāo)軸說明:x 代表橫軸,y 代表縱軸。坐標(biāo)軸效果圖包含參數(shù):值描述translate(x,y)可以改變元素的位置,而不會對相鄰元素由影響。translateX(x)只改變元素的水平位置。translateY(y)只改變元素在豎直方向的位置。scale(x,y)元素縮放,x 代表水平方向,y 代表豎直方向。scaleX(x)僅對元素 x 方向上縮放。scaleY(y)僅對元素 y 方向上縮放。skew(x-angle,y-angle)定義沿著 X 和 Y 軸的 2D 傾斜轉(zhuǎn)換。skewX(angle)定義沿著 X 軸的 2D 傾斜轉(zhuǎn)換。skewY(angle)定義沿著 Y 軸的 2D 傾斜轉(zhuǎn)換。rotate(angle)在平面上旋轉(zhuǎn)一個角度

2.3 將整數(shù)轉(zhuǎn)換為字符串

Python 提供函數(shù) str 用于將整數(shù)轉(zhuǎn)換為字符串,例如:>> a = 1>> b = 1>> x = str(a)>> y = str(b)>> x + y'11'在第 3 行,將整數(shù) a 轉(zhuǎn)換為字符串 x 在第 4 行,將整數(shù) b 轉(zhuǎn)換為字符串 y 在第 5 行,將字符串 x 和字符串 y 相加,得到結(jié)果 ‘11’

實例

#include <stdio.h>int main(){ int x, y, z; x = 0; y = 10; z = 30; if (x > y) { z = 20; } else { z = 100; } printf("%d\n", z); return 0;}運行結(jié)果100這段程序表示,當(dāng) x > y 成立的時候,執(zhí)行語句 z = 20; ,當(dāng)條件不成立的時候,執(zhí)行語句 z = 100; 。顯然條件不成立,所以執(zhí)行了語句 z = 100; 。所以最終的結(jié)果輸出時 100 。

2.1 使用數(shù)組

對于 C 語言來說,由于考慮到效率的問題的。數(shù)組的傳遞一般都是不復(fù)制的。因此函數(shù)中如果傳入的是數(shù)組,那么在被調(diào)用的函數(shù)中其實就是傳入了原始函數(shù)中的數(shù)組,而不是一個副本。

3. 語法

transform: none|transform-functions;3D 空間坐標(biāo)軸坐標(biāo)軸值說明值描述translate3d(x,y,z)定義 3D 轉(zhuǎn)換。translateX(x)定義轉(zhuǎn)換,只是用 X 軸的值。translateY(y)定義轉(zhuǎn)換,只是用 Y 軸的值。translateZ(z)定義 3D 轉(zhuǎn)換,只是用 Z 軸的值。scale3d(x,y,z)定義 3D 縮放轉(zhuǎn)換。scaleX(x)通過設(shè)置 X 軸的值來定義縮放轉(zhuǎn)換。scaleY(y)通過設(shè)置 Y 軸的值來定義縮放轉(zhuǎn)換。scaleZ(z)通過設(shè)置 Z 軸的值來定義 3D 縮放轉(zhuǎn)換。rotate3d(x,y,z,angle)定義 3D 旋轉(zhuǎn)。rotateX(angle)定義沿著 X 軸的 3D 旋轉(zhuǎn)。rotateY(angle)定義沿著 Y 軸的 3D 旋轉(zhuǎn)。rotateZ(angle)定義沿著 Z 軸的 3D 旋轉(zhuǎn)。transform-style在空間內(nèi)如何呈現(xiàn) flat 2D 呈現(xiàn), preserve-3d 3D 呈現(xiàn)我們在 transform2D 中已經(jīng)對平面屬性做了詳細(xì)的介紹,本章節(jié)主要是其 3D 屬性,這些屬性的使用需要在父級設(shè)置 perspective 和 transform-style讓父級有了透視效果以及設(shè)置父級在內(nèi)部空間的呈現(xiàn)方式。

2. TensorFlow 之中的梯度帶

既然我們能了解了什么是微分,那么在 TensorFlow 是如何進行梯度的計算的呢?答案就是 “梯度帶”:tf.GradientTape()我們先來看一個簡單的例子:import tensorflow as tfx = tf.constant(5.0)with tf.GradientTape(persistent=True) as t: t.watch(x) y = x * x z = y * ydz_dx = t.gradient(z, x)dy_dx = t.gradient(y, x)在這個例子之中,我們定義了兩個操作: y = x * x z = y * y我們令 y 為 x 的平方,讓 z 為 y 的平方,然后我們來追蹤 x 的梯度。那么先讓我們將 z 也改寫為 x 的形式: y = x * x z = x * x * x * x分別對于 x 求導(dǎo),我們可以得到 y 和 z 的導(dǎo)數(shù): dy_dx = 2 * x dz_dx = 4 * x * x * x通過手動計算,我們可以將 x 的數(shù)值帶入其中,從而得到 y 與 z 關(guān)于 x 的梯度值:分別為 10 和 500 。在上面的代碼之中,我們可以輸出 dz_dx 和 dy_dx :print(dz_dx)print(dy_dx)我們得到結(jié)果:10.0500.0可以看到,程序已經(jīng)自動求得了梯度,并且與我們計算的完全一致。具體對于 tf.GradientTape () 這個 API 來說,它會在它自身的上下文之中,將所有執(zhí)行與發(fā)生的操作都記錄在一個 tape 上。 當(dāng)我們計算結(jié)束的時候,這個 tape 上面便記錄了一個完整的計算過程,那么它便從后向前,使用反向微分算法的方式來進行梯度的計算,從而得到每個變量的梯度。

2.1 屬性值簡寫

在 ES5 中我們知道,在定義對象時屬性的值是必須要寫的,在 ES6 中規(guī)定,如果屬性名和定義的變量名是一樣的,就可以在對象中直接寫這個變量名作為對象中的一項。如下:var name = 'imooc';// ES5var obj1 = { name: name,}// ES6var obj2 = { name,}上面代碼中的 obj1 和 obj2 是一樣的意思。變量 name 可以直接寫在大括號中。這時,屬性名就是變量名,屬性值就是變量值。下面我們來看一個在函數(shù)中返回一個對象的實例:// ES5function getObj(x, y) { return {x: x, y: y};}// 等同于 ES6function getObj(x, y) { return {x, y};}getObj(1, 2) // {x: 1, y: 2}上面中的代碼可以看出,在我們平常開發(fā)中,組裝數(shù)據(jù)時是非常方便、有用的。

1. 定義條形雪碧圖動畫

/* 清除瀏覽器默認(rèn)邊距 */* { padding: 0; margin: 0; }body { /* 這段代碼是為了居中顯示,不是重點,看不懂的話可以無視 */ height: 100vh; display: flex; align-items: center; justify-content: center; /* 添加背景圖 */ background: url(../img/bg.jpg) center / cover;}.animate { width: 130px; height: 130px; background: url(../img/rect.png); /* 動畫: 動畫名(loading) 時長(0.6秒) 運行方式(step-end) 動畫次數(shù)(無限) */ animation: loading .6s step-end infinite;}/* 定義動畫:動畫名(loading) */@keyframes loading { from { background-position: 0 0 } /* 第一個數(shù)字代表x軸坐標(biāo),第二個數(shù)字代表y軸坐標(biāo) */ 10% { background-position: -130px 0 } /* x坐標(biāo):-130 y坐標(biāo):0 */ 20% { background-position: -260px 0 } /* x坐標(biāo):-260 y坐標(biāo):0 */ 30% { background-position: -390px 0 } /* x坐標(biāo):-390 y坐標(biāo):0 */ 40% { background-position: -520px 0 } /* x坐標(biāo):-520 y坐標(biāo):0 */ 50% { background-position: 0 -130px } /* x坐標(biāo):0 y坐標(biāo):-130 */ 60% { background-position: -130px -130px } /* x坐標(biāo):-130 y坐標(biāo):-130 */ 70% { background-position: -260px -130px } /* x坐標(biāo):-260 y坐標(biāo):-130 */ 80% { background-position: -390px -130px } /* x坐標(biāo):-390 y坐標(biāo):-130 */ 90% { background-position: -520px -130px } /* x坐標(biāo):-520 y坐標(biāo):-130 */ to { background-position: 0 } /* 最后一幀不顯示,可以隨便寫 */}/* 定義動畫:動畫名(animate) */@keyframes animate { from { background-position: 0 } to { background-position: -2600px }}咦?條形圖只需要定義兩行?一個from一個to???是的,這就是為什么推薦制作雪碧圖的時候做成一行的原因。你只需要定義一開始的時候圖像在原點,然后最后的時候圖像有多寬,你就寫負(fù)多少:這個圖是2600像素,所以to里面的background-position就是 -2600px。數(shù)了一下這張雪碧圖里面一共有 12 個元素,所以 steps() 括號里面要寫12。div 盒子的寬高應(yīng)該正好和雪碧圖里面的一個元素的寬高相對應(yīng):用雪碧圖的 寬 2600 除以 12 等于 216.666… 無限循環(huán)。咱們?nèi)∫粋€近似值,就 216px 吧。所以寬高設(shè)置為 216 * 300,怎么設(shè)置呢?要讓加載動畫結(jié)束之后(也就是定義加載動畫的最后一幀)div 就變成這個寬高。/* 清除瀏覽器默認(rèn)邊距 */* { padding: 0; margin: 0; }body { /* 這段代碼是為了居中顯示,不是重點,看不懂的話可以無視 */ height: 100vh; display: flex; align-items: center; justify-content: center; /* 添加背景圖 */ background: url(../img/bg.jpg) center / cover;}.animate { width: 130px; height: 130px; background: url(../img/rect.png); /* 動畫: 動畫名(loading) 時長(0.6秒) 運行方式(step-end) 動畫次數(shù)(無限) */ animation: loading .6s step-end infinite;}/* 定義動畫:動畫名(loading) */@keyframes loading { from { background-position: 0 0 } /* 第一個數(shù)字代表x軸坐標(biāo),第二個數(shù)字代表y軸坐標(biāo) */ 10% { background-position: -130px 0 } /* x坐標(biāo):-130 y坐標(biāo):0 */ 20% { background-position: -260px 0 } /* x坐標(biāo):-260 y坐標(biāo):0 */ 30% { background-position: -390px 0 } /* x坐標(biāo):-390 y坐標(biāo):0 */ 40% { background-position: -520px 0 } /* x坐標(biāo):-520 y坐標(biāo):0 */ 50% { background-position: 0 -130px } /* x坐標(biāo):0 y坐標(biāo):-130 */ 60% { background-position: -130px -130px } /* x坐標(biāo):-130 y坐標(biāo):-130 */ 70% { background-position: -260px -130px } /* x坐標(biāo):-260 y坐標(biāo):-130 */ 80% { background-position: -390px -130px } /* x坐標(biāo):-390 y坐標(biāo):-130 */ 90% { background-position: -520px -130px } /* x坐標(biāo):-520 y坐標(biāo):-130 */ /* 修改最后一幀,以便動畫結(jié)束后盒子就應(yīng)用最后一幀的樣式 */ to { /* 下一個動畫的寬高 */ width: 216px; height: 300px; /* 下一個動畫的雪碧圖 */ background-image: url(../img/animate.png); }}/* 定義動畫:動畫名(animate) */@keyframes animate { from { background-position: 0 } to { background-position: -2600px }}

首頁上一頁1234567下一頁尾頁
直播
查看課程詳情
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號