파이썬에는 scipy.spatial.distance.cdist와 비슷한 것이 있지만 변위 (빠름)가 있습니까?

Zeke Piskulich

나는 몇 주 동안 연구 코드를 작업 해 왔으며 매트릭스의 모든 지점 사이의 거리를 계산하기 위해 다중 레벨 for 루프가 아닌 cdist를 사용하여 속도를 높이려고 노력해 왔습니다.

내가 원하는 것 :

    from scipy.spatial.distance import cdist
    import numpy as np

    a=np.array([[1],[2],[3]])
    cdist(a,a, lambda u,v: u-v)
[[ 0. -1. -2.]
 [ 1.  0. -1.]
 [ 2.  1.  0.]]

그러나 내 문제는 내 연구의 맥락에서 a가 꽤 크고 cdist에서 사용자 지정 람다 함수를 사용하는 것이 cdist (a, a)보다 상당히 느리지 만 (~ 2 배 정도) 양의 값만 제공한다는 것입니다. 즉, 실제로는 a에 1,000 개의 요소가있는이 15,000 번을 계산해야하므로이 2oom은 매우 중요합니다.

cdist (a, a)는 모두 양수 값이므로 원하는 출력을 제공하지 않습니다.

[[0. 1. 2.]
 [1. 0. 1.]
 [2. 1. 0.]]

cdist에서 원하는 서명 된 출력을 생성하는 방법에 대한 제안이 있지만 람다 함수를 사용하는 것보다 더 빨리 할 수 ​​있기를 바랍니다.

감사합니다!

경화성

거리 측정 항목과 보유한 데이터의 종류에 따라 다음과 같은 다양한 옵션이 있습니다.

특정 경우에 데이터가 1D있고 |u-v| == ( (u-v)^2 )^(1/2)거리 행렬의 위쪽 및 아래쪽 삼각형이 절대적으로 동일하고 부호에 대해서만 다르다는 지식을 사용할 수 있으므로 사용자 지정 거리 함수를 피할 수 있습니다.

d = cdist(a, a)

triu_bool = np.triu(np.ones((n_samples, n_samples), dtype=bool))
triu_bool[range(n_samples), range(n_samples)] = False
d[triu_bool] *= -1
# [[ 0. -1. -2.]
#  [ 1.  0. -1.]
#  [ 2.  1.  0.]]

더 일반적이고 내 눈에 더 나은 접근 방식은 단순히 numpys방송을 사용하는 것입니다 ( 이 질문 / 답변 참조 ). 여기에 대한 예가 있습니다 u-v.

# Generate data
n_dim = 3
n_samples = int(1.5e4)
arr = np.concatenate([np.arange(n_samples)[:, np.newaxis]] * n_dim, axis=-1)
# array([[    0,     0,     0],
#        [    1,     1,     1],
#        [    2,     2,     2],
#        ...,
#        [14997, 14997, 14997],
#        [14998, 14998, 14998],
#        [14999, 14999, 14999]])

# u - v
d = arr[:, np.newaxis, :] - arr[np.newaxis, :, :]
# (n_samples, n_samples, n_dim)

대칭 거리 측정의 경우 계산의 절반이 필요하지 않습니다. 그러나 내 경험상 계산을 위쪽 삼각형이나 비슷한 것에 만 적용하는 것보다 더 빠릅니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C #에서 C의 fflush ()와 비슷한 것이 있습니까?

분류에서Dev

Rust에서 C #의 nameof ()와 비슷한 것이 있습니까?

분류에서Dev

grep에 *가 파일 이름 대체에있는 것과 비슷한 것이 있습니까?

분류에서Dev

grep에 *가 파일 이름 대체에있는 것과 비슷한 것이 있습니까?

분류에서Dev

Android의 stringByAppendingPathComponent와 비슷한 것이 있습니까?

분류에서Dev

파이썬에서 이와 비슷한 것을 어떻게 그릴 수 있습니까?

분류에서Dev

Mongo DB를 대량으로 읽는 가장 좋은 방법-이와 비슷한 것이 있습니까?

분류에서Dev

NSMutableArray에 대한 $ scope. $ watch와 비슷한 것이 있습니까?

분류에서Dev

할당자가 관련된 경우 복사 및 교체 관용구와 비슷한 것이 있습니까?

분류에서Dev

matlab의 fzero와 비슷한 파이썬 기능이 있습니까?

분류에서Dev

Notepad ++ 세션 워크 플로와 비슷한 것이 있습니까?

분류에서Dev

`delete-other-windows` (`Cx 1`)와 비슷한 것이 있지만 창 배열을 복원 할 수 있습니다.

분류에서Dev

NSUserDefaults / SharedPreferences는 TypeScript에서 비슷한 것이 있습니까?

분류에서Dev

백라이트`/ sys / class / backlight / ____ / brightness`와 비슷한 것이 있지만 데스크톱 컴퓨터 용입니까?

분류에서Dev

스몰 토크에 + =가 있습니까? 아니면 비슷한 것이 있습니까?

분류에서Dev

isGranted in symfony와 비슷한 것을 만들 수 있습니까?

분류에서Dev

Dart는 파이썬에서`defaultdict`와 같은 것을 가지고 있습니까?

분류에서Dev

LESS에는 Sass의 @content 지시문과 비슷한 것이 있습니까?

분류에서Dev

파이썬을위한 bootstrap.php와 동등한 것이 있습니까?

분류에서Dev

if 문에 대한 변수가 비어있는 것처럼 보이지만 비어 있지 않습니다.

분류에서Dev

루아와 비슷한 루아 앨리어싱이 있습니까?

분류에서Dev

F #에 행 다형성 (또는 비슷한 것)이 있습니까?

분류에서Dev

Cocoa에서 NSDateFormatter는 문자열을 날짜 객체로 파싱하기위한 dateFromString : 메소드를 제공합니다. NSByteCountFormatter와 비슷한 것이 있습니까?

분류에서Dev

이 패턴의 이름을 지정하는 방법은 무엇입니까? 비슷한 것이 있습니까? 트리거 된 콜백 대기열

분류에서Dev

거대한 목록에있는 비슷한 이름

분류에서Dev

Windows의 "PerfMon"처럼 우분투에도 비슷한 것이 있습니까?

분류에서Dev

루비는 PHP와 비슷한 다차원 배열을 가지고 있습니까?

분류에서Dev

R의 Rust 패턴 구문과 비슷한 것이 있습니까?

분류에서Dev

TryParse가 그와 비슷한 이유는 무엇입니까?

Related 관련 기사

  1. 1

    C #에서 C의 fflush ()와 비슷한 것이 있습니까?

  2. 2

    Rust에서 C #의 nameof ()와 비슷한 것이 있습니까?

  3. 3

    grep에 *가 파일 이름 대체에있는 것과 비슷한 것이 있습니까?

  4. 4

    grep에 *가 파일 이름 대체에있는 것과 비슷한 것이 있습니까?

  5. 5

    Android의 stringByAppendingPathComponent와 비슷한 것이 있습니까?

  6. 6

    파이썬에서 이와 비슷한 것을 어떻게 그릴 수 있습니까?

  7. 7

    Mongo DB를 대량으로 읽는 가장 좋은 방법-이와 비슷한 것이 있습니까?

  8. 8

    NSMutableArray에 대한 $ scope. $ watch와 비슷한 것이 있습니까?

  9. 9

    할당자가 관련된 경우 복사 및 교체 관용구와 비슷한 것이 있습니까?

  10. 10

    matlab의 fzero와 비슷한 파이썬 기능이 있습니까?

  11. 11

    Notepad ++ 세션 워크 플로와 비슷한 것이 있습니까?

  12. 12

    `delete-other-windows` (`Cx 1`)와 비슷한 것이 있지만 창 배열을 복원 할 수 있습니다.

  13. 13

    NSUserDefaults / SharedPreferences는 TypeScript에서 비슷한 것이 있습니까?

  14. 14

    백라이트`/ sys / class / backlight / ____ / brightness`와 비슷한 것이 있지만 데스크톱 컴퓨터 용입니까?

  15. 15

    스몰 토크에 + =가 있습니까? 아니면 비슷한 것이 있습니까?

  16. 16

    isGranted in symfony와 비슷한 것을 만들 수 있습니까?

  17. 17

    Dart는 파이썬에서`defaultdict`와 같은 것을 가지고 있습니까?

  18. 18

    LESS에는 Sass의 @content 지시문과 비슷한 것이 있습니까?

  19. 19

    파이썬을위한 bootstrap.php와 동등한 것이 있습니까?

  20. 20

    if 문에 대한 변수가 비어있는 것처럼 보이지만 비어 있지 않습니다.

  21. 21

    루아와 비슷한 루아 앨리어싱이 있습니까?

  22. 22

    F #에 행 다형성 (또는 비슷한 것)이 있습니까?

  23. 23

    Cocoa에서 NSDateFormatter는 문자열을 날짜 객체로 파싱하기위한 dateFromString : 메소드를 제공합니다. NSByteCountFormatter와 비슷한 것이 있습니까?

  24. 24

    이 패턴의 이름을 지정하는 방법은 무엇입니까? 비슷한 것이 있습니까? 트리거 된 콜백 대기열

  25. 25

    거대한 목록에있는 비슷한 이름

  26. 26

    Windows의 "PerfMon"처럼 우분투에도 비슷한 것이 있습니까?

  27. 27

    루비는 PHP와 비슷한 다차원 배열을 가지고 있습니까?

  28. 28

    R의 Rust 패턴 구문과 비슷한 것이 있습니까?

  29. 29

    TryParse가 그와 비슷한 이유는 무엇입니까?

뜨겁다태그

보관