三维阵列的Python相关系数

三维阵列的Python相关系数,python,numpy,Python,Numpy,有没有办法计算3D阵列上移动窗口的相关系数?当我跑步时: Import numpy as np from scipy.ndimage.filters import generic_filter arr_3d = np.dstack((data1,data2)) def function(arr_3d): return np.corrcoef(arr_3d[:,:,0],arr_3d[:,:,1]) gen_filt = generic_filter(arr_3d, function

有没有办法计算3D阵列上移动窗口的相关系数?当我跑步时:

Import numpy as np
from scipy.ndimage.filters import generic_filter

arr_3d = np.dstack((data1,data2))

def function(arr_3d):
    return np.corrcoef(arr_3d[:,:,0],arr_3d[:,:,1])

gen_filt = generic_filter(arr_3d, function, footprint=np.ones((7,7,2)), mode='nearest')
我经常犯的错误是

Traceback (most recent call last):
  File "correlate.py", line 251, in <module>
    plot_data()
  File "correlate.py", line 219, in plot_data
    gen_filt = generic_filter(arr_3d,function,footprint=np.ones((35,35,2)),mode='nearest')
  File "/apps/python/3.5.1/lib/python3.5/site-packages/scipy/ndimage/filters.py", line 1245, in generic_filter
    cval, origins, extra_arguments, extra_keywords)
  File "correlate.py", line 217, in function
    return np.corrcoef(arr_3d[:,:,0],arr_3d[:,:,1])
IndexError: too many indices for array

我没有在这里包括arr_3d,但在查看后,它似乎格式正确。

这里是一个使用不同方法的移动窗口关联:

from skimage.util import view_as_windows

#this is your window shape
window = (7,7,2)
windows = view_as_windows(arr_3d, window).reshape(-1, *window)
window_corr = np.array([np.corrcoef(item[:,:,0], item[:,:,1]) for item in windows])

您还可以以计算所有窗口的相关性为代价来避免for循环,但我认为在这种情况下循环速度更快(除非3D数组元素之间有更好的矢量化关联方式)

请打印出完整的错误堆栈。谢谢你谢谢你编辑这篇文章。你确定arr_3d实际上是3d的吗?你能用
arr_3d.shape
打印出它的形状吗?没有这些数据,很难调试。也许一个关于
data1
data2
数据的玩具示例会有所帮助。dstack似乎构成了3d阵列。我已经包含了一些示例数据。我认为问题可能在于np.corrcoef创建2d数组,但arr_3d和footprint是3d的,但我不确定。它不起作用,因为generic_filter中的函数必须通过指定的筛选器为一对输入返回标量。你想要达到的目标是什么?我认为使用通用过滤器不是正确的方法。也许你可以详细说明你最初的问题,我们可以提供更好的帮助。谢谢,请查看我贴出的答案。如果问题得到解决,您可以查看如何接受答案。谢谢。谢谢你的回复!这似乎很有效。你知道这个函数是如何处理边的吗?”scipy.ndimage.generic_filter'有不同的选项来处理边界,view_as_窗口是否自动执行此操作?此外,arr_3d的形状是(148334,2),而window_corr的形状是(34200,70,70)。这是为什么?这是它的文件:。您希望如何处理边缘?您的原始阵列形状是什么?窗口大小是什么?如果没有这些信息,您所指的形状将毫无意义。
from skimage.util import view_as_windows

#this is your window shape
window = (7,7,2)
windows = view_as_windows(arr_3d, window).reshape(-1, *window)
window_corr = np.array([np.corrcoef(item[:,:,0], item[:,:,1]) for item in windows])