python 矩陣乘法 跳過nan_python – Numpy:當一些向量元素等于零時,矩陣向量乘法不會跳過計算嗎?...

我最近一直致力于一個項目,其中我的大部分時間花費在密集矩陣A和稀疏向量v上(見

here).在我嘗試減少計算時,我注意到A.dot(v)的運行時間不受v的零條目數的影響.

為了解釋為什么我希望在這種情況下改進運行時,讓result = A.dot.v使得j = 1的結果[j] = sum_i(A [i,j] * v [j])… v.shape [0].如果v [j] = 0,則無論值A [::,j]如何,顯然結果[j] = 0.在這種情況下,我希望numpy只設置result [j] = 0,但似乎它繼續并計算sum_i(A [i,j] * v [j])無論如何.

我繼續編寫了一個簡短的示例腳本來確認下面的這種行為.

import time

import numpy as np

np.__config__.show() #make sure BLAS/LAPACK is being used

np.random.seed(seed = 0)

n_rows, n_cols = 1e5, 1e3

#initialize matrix and vector

A = np.random.rand(n_rows, n_cols)

u = np.random.rand(n_cols)

u = np.require(u, dtype=A.dtype, requirements = ['C'])

#time

start_time = time.time()

A.dot(u)

print "time with %d non-zero entries: %1.5f seconds" % (sum(u==0.0), (time.time() - start_time))

#set all but one entry of u to zero

v = u

set_to_zero = np.random.choice(np.array(range(0, u.shape[0])), size = (u.shape[0]-2), replace=False)

v[set_to_zero] = 0.0

start_time = time.time()

A.dot(v)

print "time with %d non-zero entries: %1.5f seconds" % (sum(v==0.0), (time.time() - start_time))

#what I would really expect it to take

non_zero_index = np.squeeze(v != 0.0)

A_effective = A[::,non_zero_index]

v_effective = v[non_zero_index]

start_time = time.time()

A_effective.dot(v_effective)

print "expected time with %d non-zero entries: %1.5f seconds" % (sum(v==0.0), (time.time() - start_time))

運行這個,我得到矩陣向量乘法的運行時是相同的,無論我使用密集矩陣u還是稀疏矩陣v:

time with 0 non-zero entries: 0.04279 seconds

time with 999 non-zero entries: 0.04050 seconds

expected time with 999 non-zero entries: 0.00466 seconds

我想知道這是否是設計的?或者我錯過了我正在運行矩陣向量乘法的方式.就像健全性檢查一樣:我確保numpy鏈接到我的機器上的BLAS庫,并且兩個數組都是C_CONTIGUOUS(因為這顯然需要numpy來調用BLAS).

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397146.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397146.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]Responsive Tables Demo

本文轉自:http://elvery.net/demo/responsive-tables/ A quick and dirty look at some techniques for designing responsive table layouts. This was put together in haste (and with the aid of Twitter Bootstrap) for What Do You Know Brisbane hosted by W…

Scala函數式對象-有理數

有理數類的表示 實現規范:支持有理數的加減乘除,并支持有理數的規范表示 1.定義Rational 首先,考慮用戶如何使用這個類,我們已經決定使用“Immutable”方式來使用Rational對象,我們需要用戶在定義Rational對象時提供分…

2020雙十一實時大屏_2020拼多多雙十一,拼多多雙十一活動

2020拼多多雙十一,拼多多雙十一活動,2020拼多多雙十一,拼多多雙十一活動2020拼多多雙十一,拼多多雙十一活動拼多多雙11來了全球狂歡節先領券再購物低價風暴 震撼來襲沒有最低 只有更低拼多多優惠券商城拼多多優惠商城,…

dataTables本地刷新數據解決只能初始化一次問題

2019獨角獸企業重金招聘Python工程師標準>>> dataTables的表格只能初始化一次,這樣如果需要動態改變表格數據的話就需要寫多個表格,這樣很顯然不是一個好的解決方案。 dataTables Api提供了刷新數據解決方案: 這里大概說一下案例&…

安裝Ubuntu版本linux過程中沒有提示設置root用戶密碼問題的解決辦法

原來ubunto不提倡設置root用戶,系統安裝成功后,root密碼是隨機的,那么在這種情況下如何得到root權限吶,具體方法如下: 終端中輸入:sudo passwd root 此時重新設置原登錄用戶的密碼。 設置成功后在終端繼續輸…

linux命令headtail

一、head語法head [-n -k ]... [FILE]...//k是數字默認是顯示開頭前10行。head /etc/passwd顯示開頭前5行head -5 /etc/passwdhead -n 5 /etc/passwd(注意和以下的有-的差別)head -n 5 /etc/passwd 除最后k行外,顯示剩余所有內容。head -n -5…

用-force –opengl 指令_蘋果新系統ios14新功能匯總 輕點背面等小技巧怎么用

在 iOS 14 以及更新系統中,蘋果為 iPhone X 以及更新機型帶來了“輕點背面”功能,可以讓用戶輕點手機背面來實現更多操作,并且這項功能還支持“快捷指令”。例如,如果您不希望應用讀取剪貼板中私密內容,可以利用“輕點…

PE文件格式(加密與解密3)(一)

本次的了解主要講解 PE的基本概念、MS-DOS文件頭、PE文件頭、區塊、輸入表、輸出表等。 這里我將會結合一個簡單的小程序來加深我對PE文件結構的了解。 使用學習工具:有StudyPE、LordPE、PEID。 學習PE建議看書。。和自己動手。。。 PE文件: 在WIN上&…

mysql用戶_MySQL用戶權限管理詳解

用戶權限管理主要有以下作用:1. 可以限制用戶訪問哪些庫、哪些表2. 可以限制用戶對哪些表執行SELECT、CREATE、DELETE、DELETE、ALTER等操作3. 可以限制用戶登錄的IP或域名4. 可以限制用戶自己的權限是否可以授權給別的用戶一、用戶授權mysql> grant all privile…

對ContentProvider中getType方法的一點理解

在上篇博客中我們介紹了自定義ContentProvider,但是遺漏掉了一個方法,那就是getType,自定義ContentProvider一般用不上getType方法,但我們還是一起來探究下這個方法究竟是干什么的?我們先來看看ContentProvider中對這個…

手把手教Electron+vue的使用

.現如今前端框架數不勝數,尤其是angular、vue吸引一大批前端開發者,在這個高新技術快速崛起的時代,自然少不了各種框架的結合使用。接下來是介紹electronvue的結合使用。 2.Electron是什么?? 對于我來說Electron相當于…

shell循環和分支

循環和分支對代碼塊的操作是構造組織shell腳本的關鍵. 循環和分支結構為腳本編程提供了操作代碼塊的工具.10.1. Loops循環就是重復一些命令的代碼塊,如果條件不滿足就退出循環.for loopsfor arg in [list]這是一個基本的循環結構.它與C的for結構有很大不同.forarg in [list]do …

mysql主從_MySQL主從原理及配置詳解

MySQL主從配置及原理,供大家參考,具體內容如下一、環境選擇:1.Centos 6.52.MySQL 5.7二、什么是MySQL主從復制MySQL主從復制是其最重要的功能之一。主從復制是指一臺服務器充當主數據庫服務器,另一臺或多臺服務器充當從數據庫服務…

引導修復 不是活動的_河南省視頻數據修復中心

河南省視頻數據修復中心 lk6afds河南省視頻數據修復中心 文件預覽我找到了我要恢復文件,可是,這個文件能能正確恢復呢。沒有用的文件不可以刪掉嗎。我們先來看看盤文件夾都是什么吧。(以下僅限于~系統)一般來說,剛剛安裝的電腦系統盤主要包含…

企業日志分析 五大問題需重點注意

資訊 | 安全 | 論壇 | 下載 | 讀書 | 程序開發 | 數據庫 | 系統 | 網絡 | 電子書 | 微信學院 | 站長學院 | 源碼 | QQ | 專欄 | 考試 | 系統安全| 網站安全| 企業安全| 網絡安全| 工具軟件| 殺毒防毒| 加密解密|首頁 > 安全 > 企業安全 > 正文企業安全…

sqlite換成mysql_從SQLITE的數據轉到MYSQL

接同事需求,要求從SQLITE的數據轉到MYSQL,這東西以前也沒接觸過。這里搜搜,那里試試,下面把過程列一下。主要過程分三步:1,把SQLITE表結構導出來,作一定的格式調整2,把SQLITE數據導出…

python學習筆記(一):python入門

上周六終于開始接觸心心念念的python了,本人學習語言算是零基礎,java語法比較復雜,所以選擇了一個語法相對還是比較簡單,而且現在使用也是越來越廣泛的python進行了學習。下面就言歸正傳吧 在學習python之前先來了解下現今比較流行…

MySQL查詢優化之explain的深入解析

在分析查詢性能時,考慮EXPLAIN關鍵字同樣很管用。EXPLAIN關鍵字一般放在SELECT查詢語句的前面,用于描述MySQL如何執行查詢操作、以及MySQL成功返回結果集需要執行的行數。explain 可以幫助我們分析 select 語句,讓我們知道查詢效率低下的原因,從而改進我…

怎么驗證proftpd安裝成功_英雄聯盟手游泰服安卓賬號怎么注冊

英雄聯盟手游中泰服安卓賬號怎么注冊?泰服安卓賬號的注冊流程是怎樣的?泰服安卓賬號的注冊與其他服安卓賬號的注冊是否一致?接下來就給介紹下手游中泰服安卓賬號的注冊,希望對各位玩家能有所幫助。英雄聯盟游戲新泰服安卓賬號怎樣…

oracle實現mysql的if_oracle中decode函數 VS mysql中的if函數和case函數

oracle中有decode函數,如下:select sum(decode(sex,男,0,1)) 男生數 from school;統計男生數目,含義為:decode()中sex字段為男時,用1代替,然后計算總和而mysql中沒有該函…