我有如下陣列
samples_data = [array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([ 0. , 0. , 0. , ..., -0.00020519,
-0.00019427, -0.00107348], dtype=float32)
array([ 0.0000000e 00, 0.0000000e 00, 0.0000000e 00, ...,
-8.9004419e-07, 7.3998461e-07, -6.9706215e-07], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)]
我有這樣的功能
def generate_segmented_data_1(
samples_data: np.ndarray, sampling_rate: int = 16000
) -> np.ndarray:
new_data = []
for data in samples_data:
segments = segment_audio(data, sampling_rate=sampling_rate)
new_data.append(segments)
new_data = np.array(new_data)
return np.concatenate(new_data)
它顯示這樣的錯誤
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 11 has 2 dimension(s)
索引0處的陣列是這樣的
[array([ 0. , 0. , 0. , ..., -0.00022057,
0.00013752, -0.00114789], dtype=float32)
array([-4.3174211e-04, -5.4488028e-04, -1.1238289e-03, ...,
8.4724619e-05, 3.0450989e-05, -3.9514929e-05], dtype=float32)]
那么索引 11 處的陣列是這樣的
[[3.0856067e-05 3.0295929e-05 3.0955063e-05 ... 8.5010566e-03
1.3315652e-02 1.5698154e-02]]
然后我應該怎么做才能將我生成的所有段連接為一個段陣列?
uj5u.com熱心網友回復:
我不太確定我理解你想要做什么。
b = np.array([[2]])
b.shape
# (1,1)
b = np.array([2])
b.shape
# (1,)
對于問題的段部分,尚不清楚您的資料結構是什么,但是代碼示例已損壞,因為您要附加到尚未創建的串列中。
是什么samples_data?是清單嗎?什么清單?numpy 陣列?如果是這樣,這些陣列的尺寸是多少?
uj5u.com熱心網友回復:
如何使以下陣列的形狀為 1D 而不是 2D?
b = np.array([[2]]) b_shape = b.shape這將導致 (1, 1)。但是,我希望它得到 (1, ) 的結果而不使其變平?
我懷疑這種混淆源于您選擇了一個也可以視為標量的示例,因此我將改用另一個示例:
b = np.array([[1,2]])
現在,b.shape是(1,2)。以任何方式(無論是它b.flatten()還是b.squeeze()使用)洗掉第一個“一個”維度b[0]都會導致相同的結果:
assert (b.flatten() == b.squeeze()).all()
assert (b.flatten() == b[0]).all()
現在,對于真正的問題:您似乎正在嘗試從“段”連接“行”,但是“段”(我相信從您的示例資料中是np.arrays 的串列?)的格式不一致。
您的樣本資料非常混亂:段 0-10 似乎是一維陣列的串列;第 11、18 和 19 段是二維陣列或浮點數串列。這加上錯誤代碼表明您在段的資料處理中存在問題。
現在,要實際連接兩種型別的資料:
new_data = []
for data in samples_data:
segments = function_a(data) # it appears this doesn't return consistent data
segments = np.asarray(segments) # force it to always be an array...
if segments.ndim > 1: # ...and append each row
for row in segments:
new_data.append(row)
elif segments.ndim == 1: # if just one row, append it directly
new_data.append(segments)
else:
# function_a returned an empty list, do nothing
pass
鑒于顯示的資料和代碼,這應該可以作業(但它既不高效,也沒有經過測驗)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439809.html
上一篇:Firestore持續時間型別
下一篇:用白色替換特定像素
