在Numpy中,我可以使用np.appendor 连接两个端到端的数组np.concatenate:
>>> X = np.array([[1,2,3]])
>>> Y = np.array([[-1,-2,-3],[4,5,6]])
>>> Z = np.append(X, Y, axis=0)
>>> Z
array([[ 1, 2, 3],
[-1, -2, -3],
[ 4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)
但是这些会复制他们的输入数组:
>>> Z[0,:] = 0
>>> Z
array([[ 0, 0, 0],
[-1, -2, -3],
[ 4, 5, 6]])
>>> X
array([[1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)
有没有办法将两个数组连接到视图中,即没有复制?那需要一个np.ndarray子类吗?
我正在尝试在python中实现具有200k +数据点的1000维数据的算法.我想使用numpy,scipy,sklearn,networkx和其他有用的库.我想执行所有点之间的成对距离等操作,并在所有点上进行聚类.我已经实现了以合理的复杂度执行我想要的工作算法但是当我尝试将它们扩展到我的所有数据时,我用完了ram.我当然这样做,在200k +数据上创建成对距离的矩阵需要很多内存.
接下来是:我真的很想在具有少量内存的糟糕计算机上执行此操作.
有没有可行的方法让我在没有低ram限制的情况下完成这项工作.它需要更长的时间才真正不是问题,只要时间要求不会无限!
我希望能够让我的算法工作,然后在一小时或五个小时后回来,而不是因为它用完了公羊而被卡住了!我想在python中实现它,并能够使用numpy,scipy,sklearn和networkx库.我希望能够计算到我所有点的成对距离等
这可行吗?我将如何解决这个问题,我可以开始阅读哪些内容?
最好的问候//梅斯默
我有一个数百个10x10阵列的列表,我想将它们堆叠成一个Nx10x10阵列.起初我试过一个简单的
newarray = np.array(mylist)
但是返回的是"ValueError:使用序列设置数组元素".
然后我找到了dstack()的在线文档,它看起来很完美:"......这是将2D数组(图像)堆叠成单个3D数组进行处理的简单方法." 这正是我想要做的.然而,
newarray = np.dstack(mylist)
Run Code Online (Sandbox Code Playgroud)
告诉我"ValueError:数组维度必须同意,除了d_0",这是奇怪的,因为我的所有数组都是10x10.我想也许问题是dstack()期望一个元组而不是一个列表,但是
newarray = np.dstack(tuple(mylist))
Run Code Online (Sandbox Code Playgroud)
产生了同样的结果.
在这一点上,我花了大约两个小时在这里和其他地方搜索,以找出我做错了什么和/或如何正确地解决这个问题.我甚至尝试将我的数组列表转换为列表列表然后再转换为3D数组,但这也不起作用(我最终得到了数组列表的列表,接着是"设置数组元素"作为序列"再次出错".
任何帮助,将不胜感激.