[問題] 一維陣列,元素個數放大?

看板C_and_CPP作者 (Marshall)時間9年前 (2016/12/17 14:48), 9年前編輯推噓9(9035)
留言44則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Win 7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Visual Studio 2015 C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) opencv 問題(Question): 假設有兩個陣列 int a[2000]; 元素個數=1234 int b[2000]; 元素個數=1789 想把他們全部放大到有2000個元素,之後兩個陣列內容要比大小 Diff = Diff + abs(a[cnt] - b[cnt]); 陣列數目不同無法比,所以想讓他們正規化 請問有沒有簡單容易實做的方法? 目前只能想到用內插補資料,但整體放大的方法要如何做呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.18.57.175 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1481957331.A.E05.html

12/17 15:37, , 1F
tiida
12/17 15:37, 1F
這跟念大悲咒是一樣的RRRRRRR

12/17 15:59, , 2F
最簡單應該是一開始大小就用500
12/17 15:59, 2F
謝謝,我突然發現用錯表達方法, 陣列宣告時都用5000,但演算法算完後, 每個陣列的元素個數會不一樣

12/17 16:08, , 3F
只能放大嗎 不能縮小? 縮小不用補資料
12/17 16:08, 3F
可以,主要目的是讓大家的元素個數一樣 像我題目說B的元素有到1789, 因為A沒有index=1789的值, 會造成演算法錯誤 不知大大能否提點一下如何做呢?

12/17 16:37, , 4F
用link吧,伸縮自如跟海綿寶寶一樣
12/17 16:37, 4F

12/17 16:48, , 5F
看起來不是陣列的問題 比較像是演算法的問題
12/17 16:48, 5F

12/17 19:58, , 6F
演算法問題 +1
12/17 19:58, 6F
謝謝,我還是貼個圖好了 http://imgur.com/a/qWwXq 我表達有誤,應該說是,演算法算出來就會是這樣 算出來後等於左邊兩張圖,一個橫軸300多,一個橫軸400初 要經過放大縮小的正規化,會變成右邊,大家的橫軸都是500 不好意思一直沒表達清楚

12/17 21:32, , 7F
所以這是演算法問題無誤, 你要的不是補資料是拉伸資料
12/17 21:32, 7F

12/17 21:32, , 8F
那你就要考慮你的資料必須要怎麼延伸才會有意義
12/17 21:32, 8F

12/17 21:33, , 9F
一個類似的例子 (但「非常可能和你要的不同」) 是圖片縮放
12/17 21:33, 9F

12/17 21:35, , 10F
然後另外一個考慮的點: 你的演算法是否要求等長資料?
12/17 21:35, 10F

12/17 21:36, , 11F
如果「等長」這個點不是重點的話你應該是改演算法去適用
12/17 21:36, 11F

12/17 21:37, , 12F
注意我指的不是演算法的細節而是這演算法到底在算什麼東西
12/17 21:37, 12F
感謝 一直忘記說明,這個是手勢的影像辨識,h是手勢的輪廓 因為每張圖的輪廓長度不一樣,造成現在這個問題 主要是想把左邊橫軸不一樣的資料,轉成右邊那10張橫軸都一樣的 困難點在於,a[100]轉成a[200]很簡單,全部內插1格就好 但是a[57]轉成a[200],或是b[123]轉成b[200],這種scale不一樣的不知道該如何寫 ※ 編輯: hsucheng (36.238.65.200), 12/17/2016 23:11:14

12/18 01:41, , 13F
那你有最原始 2000 個點的資料嗎?如果沒有的話我想直接
12/18 01:41, 13F

12/18 01:41, , 14F
先轉到 max(asize,bsize) 維度即可?
12/18 01:41, 14F

12/18 01:42, , 15F
若轉到 2000 個點,用最笨的最近補點法的概念下去做應可行
12/18 01:42, 15F

12/18 02:29, , 16F
可不可行其實要看原 PO 之後要做什麼操作
12/18 02:29, 16F

12/18 02:30, , 17F
所以才會問他說之後的操作演算法有沒有要求等長資料
12/18 02:30, 17F

12/18 02:31, , 18F
依操作不同有些資料不能貿然做內插/最近補點/etc
12/18 02:31, 18F

12/18 02:31, , 19F
他有要等長啊!上面有個公式有講了
12/18 02:31, 19F

12/18 02:31, , 20F
Diff = Diff + abs(a[cnt] - b[cnt]); 這個前提應就是
12/18 02:31, 20F

12/18 02:32, , 21F
要等長吧 ?? 還是我誤會了 ??
12/18 02:32, 21F

12/18 02:33, , 22F
不過照整個述敘看起來,原 po 想要的,應該是去計算,兩
12/18 02:33, 22F

12/18 02:33, , 23F
個波型數值的相似度,最後那明顯是種 MSE
12/18 02:33, 23F

12/18 02:34, , 24F
若猜對的話,就用內插法吧。
12/18 02:34, 24F

12/18 02:36, , 25F
12/18 02:36, 25F

12/18 02:37, , 26F
12/18 02:37, 26F

12/18 02:45, , 27F
再補一下好了,我想原 po 要做的是幾個手勢做判斷,而特
12/18 02:45, 27F

12/18 02:46, , 28F
徵點的取得個數不同,所以想先展開,但展開要件是波形要
12/18 02:46, 28F

12/18 02:47, , 29F
和原本長得像,再去做 MSE 計算。而我 code 裡的內插法
12/18 02:47, 29F

12/18 02:47, , 30F
主要是補點加權,假設 mapping 到的是 dst[0]=src[6.7]
12/18 02:47, 30F

12/18 02:48, , 31F
則 src[0] = dst[6]*0.3 + dst[7]*0.7
12/18 02:48, 31F

12/18 02:48, , 32F
若猜錯的話... 額 .. 就略過我的發言吧 Orz
12/18 02:48, 32F

12/18 02:52, , 33F
疑!我看懂 LPH66 敘述了,那請問,若不展開變等長的話,
12/18 02:52, 33F

12/18 02:53, , 34F
有什麼方法可以判斷兩個,取樣點數不同之波型是否相似呢?
12/18 02:53, 34F

12/18 03:37, , 35F
嘛, 我只是單純因為不知道他要做什麼運算才會提醒注意的
12/18 03:37, 35F

12/18 03:38, , 36F
你這個問題似乎是屬於訊號分析的範圍, 那個我沒什麼在接觸
12/18 03:38, 36F

12/18 03:38, , 37F
但也因為他這個問題似乎真的有摸到這個邊所以才會想到
12/18 03:38, 37F

12/18 03:39, , 38F
經過內插/補點/etc之後的訊號失真問題
12/18 03:39, 38F

12/18 14:04, , 39F
剛查了一下,波型相似的算法的確不少,像fft,match patt
12/18 14:04, 39F

12/18 14:04, , 40F
ern等,方向確實很廣。
12/18 14:04, 40F

12/18 17:43, , 41F
把資料分別做擬合曲線後,比較兩個曲線是否一樣
12/18 17:43, 41F

12/19 08:46, , 42F
樓上正解~
12/19 08:46, 42F

12/20 13:17, , 43F
以原po需求可以用 Dynamic Time Warping
12/20 13:17, 43F

12/23 22:25, , 44F
抓出features
12/23 22:25, 44F
文章代碼(AID): #1OLD_Ju5 (C_and_CPP)