2013-05-16 2 views
0

두 개의 배열에 대해 요소별로 요소를 곱하고 비슷한 유형의 배열을 반환하는 numpy의 * 연산자와 유사한 함수가 있습니까? 예를 들어Labview : 요소 별 배열 곱셈 연산

: *이 소자 - 방식 승산 인 정규 행렬 곱셈이 아닌 방법

#Lets define: 
a = [0,1,2,3] 
b = [1,2,3,4] 
d = [[1,2] , [3,4], [5,6]] 
e = [3,4,5] 

#I want: 
a * 2 == [2*0, 1*2, 2*2, 2*3] 
a * b == [0*1, 1*2, 2*3, 3*4] 
d * e == [[1*3, 2*3], [3*4, 4*4], [5*5, 6*5]] 
d * d == [[1*1, 2*2], [3*3, 4*4], [5*5, 6*6]] 

참고.

현재 가장 좋은 솔루션은 이것을 수행하는 일부 c 코드를 작성하고 컴파일 된 dll을 가져 오는 것입니다.

더 나은 해결책이 있어야합니다.

편집 : LabVIEW 2011을 사용하면 빠릅니다.

+0

LabView의 버전은 무엇입니까? 또한, 이것이 (정말로) 빠를 필요가 있습니까? –

+1

a * 2, a * b는 표준 곱셈과 함께 작동합니다. vi. 다른 사람들을 위해 ForLoop이있는 subvi를 만들 수 있으며, 다중 코어를 사용하도록 병렬화 할 수도 있습니다. – BlacKow

+0

@BlacKow '작동'하지만 적절한 행렬 곱셈을 수행하지만 요소 별 곱셈은 수행하지 않습니다. –

답변

2

처음 두 곱셈은 '곱하기'프리미티브를 사용하여 수행 할 수 있습니다. 두 번째 케이스의 배열 길이가 동일한 지 확인하십시오.
세 번째 곱하기에 for 루프를 사용할 수 있습니다 (자동 인덱싱 사용). 기본 인덱스가 무엇인지 LabVIEW에 지시해야하기 때문에 이것이 필요합니다.
마지막 곱셈은 곱셈 프리미티브를 사용하여 (다시) 수행 할 수 있습니다. enter image description here

+0

실용적인 솔루션에 대한 당신의 명성 - 그러나 거기에 존재하는 연산자가 존재하지 않는 것으로 나타났습니다 - 그냥 내 참조에 대한 - 이것은 응용 프로그램에서 C Dll 같은 작업을하는 것보다 50 배나 느립니다. – Doug

+0

잘 50 번은 너무 많이입니다. 벤치 마크를 실행하고 두 코드 세트 (LabVIEW 및 C)를 업로드 할 수 있습니까? –

0

내 결과는 이전 포스터와 다릅니다 (반대). 난 정수 (1,2,3,4, ...)의 4x4 배열로 곱한 난수 (크기 1000)의 4x1000 배열을 생성했습니다. 행렬 곱셈 VI를 사용하여이 작업을 100,000 번 수행했으며 for 루프를 사용하여 배열에서 연산을 수행했습니다. 행렬 VI의 경우 0.328 초, for 루프의 경우 0.051 초가 걸립니다. 컴파일 된 DLL을 사용하면 Labview보다 빠를 수 있지만 내장 함수의 경우에는 그렇지 않습니다.

이것은 분명히 예상 한 바가 아니지만 많은 사이클에서 일관됩니다. VI는 표준 실행 스레드입니다. 모든 데이터 유형은 시간 지정 작업 전에 설정되며 루프에서 강요가 발생하지 않습니다. 작업은 별도로 수행되며 시간 측정과 마찬가지로 플랫 시퀀스 구조로 스테이징됩니다. 병렬 처리 기능이 꺼져 있습니다.

+1

몇 가지 코드를 표시하고 질문에 대한 답변의 범위를 좁힐 수 있습니까? – dgilperez