为什么这两个numpy数组看起来是链接的?

hc2pp10m  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在做一个使用子带加扰对音频信号进行加密的代码,我使用这个算法来混合它们:
https://imgur.com/gallery/POuKa17
Matriz是一个置换矩阵(每行和每列上除了1之外都是零),sb是我存储扰码的np数组,我想用for循环来 Shuffle ,我在另一个小数组文件上测试了该算法,它工作得很好,即使当我比较sb[:,0]和sb_midi[:,3]时,它们也给予了相同的结果(键为12212时,它将0更改为3),但是当我绘制sb和sb_midi时,它们完全相同,我试图绘制差异,但是,再次,它绘制了相同的结果。
这似乎很荒谬,我不能停止思考,我犯了一个愚蠢的错误,但我疯了寻找它,我修复了数百个错误,但这是真的很奇怪,任何想法?这是一个学士项目的代码,所以如果有任何帮助,那就太好了,非常感谢。
我试着把sb_midi打乱,但总是和sb一样
编辑:

sb=np.zeros((len(yll),n_sub)) #creamos esta matriz para en cada columna ubicar una señal diezmada

    sb[:,0]=yll
    sb[:,1]=ylh
    sb[:,2]=yhl
    sb[:,3]=yhh
    sb_out=np.zeros((len(yll),n_sub))
    sb_midi=np.zeros((len(yll),n_sub))
    x_out=np.array((n_sub*len(yll),1))

字符串
编辑2:

matriz=matriz_permutacion(key,n_sub) #una función propia genera la matriz de permutación de orden el numero de subbandas
  traspuesta=np.transpose(matriz)

  plt.figure(4)
  plt.plot(20*np.log10(abs(fft(sb))), color = 'red', label = 'x')
  plt.title('Sb')
  plt.xlabel('tiempo')
  plt.ylabel('amplitud')
  plt.savefig(r'Downloads\codigos_tfg\figuras\x.png')

  i=np.argmax(matriz,axis=1)
  #sb_midi.dtype=int
  #sb.dtype=int
  print(i)
 
  for N in range(0, n_sub):
   #[j,i]=np.max(matriz[:N, :]), np.argmax(matriz[:n, N])
   j=i[N]
   sb_midi[:,j]=sb[:,N]

  #sb_midi=sb_midi[:n_sub,:n_sub]

  plt.figure(5)
  plt.plot(20*np.log10(abs(fft(sb_midi))), color = 'red', label = 'x')
  plt.title('sb_midi')
  plt.xlabel('tiempo')
  plt.ylabel('amplitud')
  plt.savefig(r'Downloads\codigos_tfg\figuras\x.png')

zdwk9cvp

zdwk9cvp1#

因为:

traspuesta=np.transpose(matriz)

字符串
在原始缓冲区上创建一个 * 视图 *:

>>> import numpy as np
>>> arr = np.array([[1,2,3], [4,5,6]])
>>> transposed = np.transpose(arr)
>>> arr
array([[1, 2, 3],
       [4, 5, 6]])
>>> transposed
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> transposed.flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
>>> transposed.base
array([[1, 2, 3],
       [4, 5, 6]])
>>> transposed.base is arr
True


这两个数组对象共享相同的底层缓冲区,transpose对象只是切换为f-连续。
如果你想要一个新的数组,你应该显式地复制它:

tranposed = np.transpose(arr).copy()


顺便说一下,你可以使用.T来转置一个数组:

transposed = arr.T.copy()

相关问题