Python "Object too Deep for desired array" hatası

dorukmacdo

Hectopat
Katılım
2 Şubat 2021
Mesajlar
148
Makaleler
2
Daha fazla  
Cinsiyet
Erkek
Herkese merhaba, Python 3.9 sürümünde bir kod yazdım fakat hata aldım. Yazmaya çalıştım algoritma ses kaydında klaket. WAV dosyasındaki sesi içeriyor ve o sesin hangi saniyede olduğunu bulup yazdırmasını istiyordum ama ne yazık ki hata aldım hata çözebilecek ya da bana yardım edebilecek var mı?

Kod:
Python:
import numpy as np
import soundfile as sf

def find_klaket_time(audio_file, klaket_file, threshold=0.1):
    # Ses kaydını yükle
    audio_data, sample_rate_audio = sf.read(audio_file)

    # Klaket sesini yükle
    klaket_data, sample_rate_klaket = sf.read(klaket_file)

    # Örnekleme hızlarını eşitle (farklı hızda ise)
    if sample_rate_audio != sample_rate_klaket:
        raise ValueError("Ses kaydı ve klaket sesi dosyalarının örnekleme hızları aynı olmalı.")

    # Klaket sesi ve ses kaydı arasındaki benzerliği bul
    correlation = np.correlate(audio_data, klaket_data, mode='same')

    # Eşik değeriyle karşılaştırarak klaket sesinin zamanını bul
    klaket_time_index = np.argmax(correlation > threshold)
    klaket_time = klaket_time_index / sample_rate_audio

    return klaket_time

# Ses kaydı dosyası ve klaket sesi dosyası
audio_file = "ses_kaydi.wav"
klaket_file = "klaket.wav"

try:
    # Klaket sesinin zamanını bul
    klaket_time = find_klaket_time(audio_file, klaket_file)

    print(f"Klaket sesi {klaket_time:.2f} saniyede çaldı.")
except ValueError as e:
    print("Hata:", e)

Hata:
Kod:
Hata: object too deep for desired array
 
Ekstra boyutu kaldırarak veya dönüştürerek hatayı çözebilirsin.
Bir boyutlu dizi.
Hatayı çözmenin bir yolu, dilimleyerek ekstra boyutu kaldırmaktır dizide.

Python:
import numpy as np

x = np.array([1, 2, 3])

y = np.array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])

print(y[:, 0])  # ️ [0.5 0.2]

arr = np.convolve(x, y[:, 0], 'same')

print(arr)  # ️ [0.5 1.2 1.9]




çok boyutlu bir diziyi tek boyutluya dönüştürmek istersende

Python:
import numpy as np

x = np.array([1, 2, 3])

y = np.array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])

#  convert the array to one-dimensional
y = np.reshape(y, y.size)
print  # ️ [0.5 1. 0.3 0.2 0.7 0.8]

arr = np.convolve(x, y, 'same')

print(arr)  # 👉️ [2.  3.8 3.8 2.  2.8 3.7]
 
Son düzenleyen: Moderatör:
Ekstra boyutu kaldırarak veya dönüştürerek hatayı çözebilirsin.
Bir boyutlu dizi.
Hatayı çözmenin bir yolu, dilimleyerek ekstra boyutu kaldırmaktır dizide.

İmport numpy as np.

X = np. Array([1, 2, 3])

Y = np. Array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])

Print(y[:, 0]) # 👉️ [0.5 0.2]

Arr = np. Convolve(X, y[:, 0], 'same')

Print(arr) # 👉️ [0.5 1.2 1.9]



Çok boyutlu bir diziyi tek boyutluya dönüştürmek istersende.

İmport numpy as np.

X = np. Array([1, 2, 3])

Y = np. Array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])

# ✅ Convert the array to One-dimensional
Y = np. Reshape(y, y. Size)
Print(y) # 👉️ [0.5 1. 0.3 0.2 0.7 0.8]

Arr = np. Convolve(X, Y, 'same')

Print(arr) # 👉️ [2. 3.8 3.8 2. 2.8 3.7]

İmport numpy as np.

X = np. Array([1, 2, 3])

Y = np. Array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])

Print(y[:, 0]) # 👉️ [0.5 0.2]

Arr = np. Convolve(X, y[:, 0], 'same')

Print(arr) # 👉️ [0.5 1.2 1.9]
Bunu ilk atığım koda uygulayıp gönderebilir misin nasıl ekleyeceğimi anlamadım.
Denedim böyle bir şey oldu.

Python:
import numpy as np.
import soundfile as sf.
def find_klaket_time(audio_file, klaket_file, threshold=0.1):
 # Ses kaydını yükle.
 audio_data, sample_rate_audio = sf.read(audio_file)
 # Klaket sesini yükle.
 klaket_data, sample_rate_klaket = sf.read(klaket_file)
 # Örnekleme hızlarını eşitle (farklı hızda ise)
 if sample_rate_audio != sample_rate_klaket:
 raise ValueError("Ses kaydı ve klaket sesi dosyalarının örnekleme hızları aynı olmalı.")
 # Klaket sesi ve ses kaydı arasındaki benzerliği bul.
 correlation = np.correlate(audio_data, klaket_data, mode='same')
 # Eşik değeriyle karşılaştırarak klaket sesinin zamanını bul.
 klaket_time_index = np.argmax(correlation > threshold)
 klaket_time = klaket_time_index / sample_rate_audio.
 return klaket_time.
# Ses kaydı dosyası ve klaket sesi dosyası.
audio_file = "ses_kaydi.wav"
klaket_file = "klaket.wav"
try:
 # Klaket sesinin zamanını bul.
 klaket_time = find_klaket_time(audio_file, klaket_file)
 print(f"Klaket sesi {klaket_time:.2f} saniyede çaldı.")
except ValueError as e:
 print("Hata:", e)
import numpy as np.
x = np.array([1, 2, 3])
y = np.array([[0.5, 1, 0.3], [0.2, 0.7, 0.8]])
print(y[:, 0]) # 👉️ [0.5 0.2]
arr = np.convolve(x, y[:, 0], 'same')
print(arr) # 👉️ [0.5 1.2 1.9]

Ama direk parantezde olanları söyledi bana klaket sesini bulup yazdırmadı.
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı