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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

簡單線性相關(guān)性

簡單線性相關(guān)性

繁花不似錦 2023-10-06 19:36:31
試圖找出兩個(gè)向量是否線性相關(guān)或獨(dú)立。我不斷遇到錯(cuò)誤“數(shù)組的最后兩個(gè)維度必須是正方形?有人可以解釋一下嗎?def Indy2Vec(v1, v2):        A = np.array([v1])    B = np.array([v2])    print(A)    #A =np.linalg.matrix_rank(A)    A=np.linalg.solve(A,B)        return Av1 = np.array([0, 5, 0])v2 = np.array([0, -10, 0])v3 = np.array([1, 2, 3])v4 = np.array([-2, -4, -6])Indy2Vec(v1,v2)
查看完整描述

3 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

錯(cuò)誤的問題陳述

看來你沒有解決正確的問題。正如您所說,它不能像您使用的方法一樣工作:

計(jì)算已確定的滿秩線性矩陣方程 ax = b 的“精確”解 x。

如文檔中所定義。

將您的問題寫為 是很誘人的Ax = b。但是,您需要一個(gè) 3x3 矩陣來測試向量b=[0,0,0]T,并找到一個(gè)非平凡的解決方案x來聲明所有三個(gè)向量都不是線性獨(dú)立的。但這意味著矩陣沒有滿秩。

在您的代碼中,以下表達(dá)式無法滿足函數(shù)簽名:

np.linalg.solve(np.array([v1]), v2)

并引發(fā)以下錯(cuò)誤:

LinAlgError: Last 2 dimensions of the array must be square

就矩陣形狀而言,有效的調(diào)用numpy.linalg.solve是:

np.linalg.solve(np.array([v1, v2, v3]).T, np.zeros(v1.size))

但在兩個(gè)方面失敗了:

LinAlgError: Singular matrix

首先因?yàn)榫仃嚥皇菨M秩的,因此不可逆。其次,這并不能解決兩個(gè)向量的問題。

通用解決方案

import numpy as np
from scipy import linalg

相反,您想要解決有關(guān)線性獨(dú)立性的更普遍的問題,可以通過評(píng)估[v1, v2]T來解決:

在線性代數(shù)中,矩陣 A 的秩是由其列生成(或跨越)的向量空間的維數(shù)。這對(duì)應(yīng)于 A 的線性獨(dú)立列的最大數(shù)量。

對(duì)于 numpy,您可以使用numpy.linalg.matrix_rank來執(zhí)行此操作:

np.linalg.matrix_rank(np.array([v1, v2]).T) # Missing dimension: 1
np.linalg.matrix_rank(np.array([v1, v3]).T) # Full rank: 2

此方法對(duì)執(zhí)行SVD 分解計(jì)算出的空奇異值進(jìn)行計(jì)數(shù),該算法的實(shí)現(xiàn)由scipy.linalg.svd提供:

U, s, V = linalg.svd(np.array([v1, v2]).T) # s = [11.18033989, 0.]
U, s, V = linalg.svd(np.array([v1, v3]).T) # s = [5.55992016, 2.84381571]

或者對(duì)其執(zhí)行高斯消元法(假設(shè)使用LU 分解)并檢查結(jié)果。scipy 包提供了scipy.linalg.lu

p, l, u = linalg.lu(np.array([v1, v2]).T) # Null pivot: u = [[5., -10.], [0., 0.]]
p, l, u = linalg.lu(np.array([v1, v3]).T) # Full rank:  u = [[5., 2.], [0., 3.]]

所有這些方法都會(huì)評(píng)估矩陣列所跨越的向量空間的維數(shù)。如果矩陣是滿秩的,那么你的向量是線性獨(dú)立的。如果不是,則至少有兩個(gè)相關(guān)向量。

那么解決您的問題的一個(gè)簡單方法是:

def indep1(*args):

    A = np.array(args).T

    return np.linalg.matrix_rank(A) == len(args)


indep1(v1, v2) # False

indep1(v1, v3) # True

indep1(v1, v2, v3) # False

indep1(v1, np.zeros(v1.size)) # False

特例

如果您停留在 3D 向量空間中并且只需要檢查兩個(gè)向量,您還可以利用numpy.cross提供的叉積

np.cross(v1, v2) # Colinear: [0, 0, 0]
np.cross(v1, v3) # Not colinear: [15,  0, -5]

更具體的替代方案是:

def indep2(a, b):

    return not np.allclose(np.cross(a, b), 0.)


indep2(v1, v2) # False

indep2(v1, v3) # True

# indep2(v1, v2, v3) # TypeError

indep2(v1, np.zeros(v1.size)) # False

它們是一個(gè)恒定的系統(tǒng)

正如 所建議的@MadPhycist,我們還可以評(píng)估共線向量共享標(biāo)量比例因子(例如 )的事實(shí)a = k*b,那么測試它的非防彈方法是檢查坐標(biāo)之比是否恒定:


def indep3(a, b):

    r = a/b                                 # Ratio of coordinates

    q = np.isfinite(r)                      # Filter bad ratio (zero division)

    return not np.allclose(r[q], r[q][0])   # Assess all ratio are equal


indep3(v1, v2) # False

indep3(v1, v3) # True

# indep3(v3, np.zeros(v1.size)) # IndexError

如果它比以前的解決方案需要更少的計(jì)算并且不依賴于高水平的線性代數(shù),那么它需要處理特定的情況,并且建議的實(shí)現(xiàn)是臭的(不要使用它)。


格拉米安法

可以安全地對(duì)兩個(gè)向量實(shí)現(xiàn)公開的方法,@dmuir如下所示:


def indep4(a, b):

    return not np.isclose(np.dot(a,b)*np.dot(b,a), np.dot(a,a)*np.dot(b,b))


indep4(v1, v2) # False

indep4(v1, v3) # True

indep4(v3, v4) # False

indep4(v3, np.zeros(v1.size)) # False


查看完整回答
反對(duì) 回復(fù) 2023-10-06
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

對(duì)兩個(gè)向量的簡單測試是:A 和 B 是線性相關(guān)的 iff

(A.B)*(A.B) == (A.A) * (B.B)

在哪里 。是點(diǎn)積。

當(dāng)然,在使用浮點(diǎn)運(yùn)算時(shí),您必須小心測試相等性。

這可以推廣到更多的向量。V[1] .. V[n] 是線性相關(guān)的當(dāng)且僅當(dāng)它們的 Gramian G 是奇異的,其中

G[i,j] = V[i].V[j] (i,j=1..N)


查看完整回答
反對(duì) 回復(fù) 2023-10-06
?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

為什么不使用更簡單的算法:


def is_linearly_dependent(a, b):

    non_zero = b != 0

    if len(np.unique(a[non_zero]/b[non_zero])) > 1:

        return False

    else:

        zero = np.logical_not(b)

        if np.any(a[zero] != 0):

            return False

    return True


查看完整回答
反對(duì) 回復(fù) 2023-10-06
  • 3 回答
  • 0 關(guān)注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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