Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 内存问题:批量构造下三角矩阵(以矢量化方式)_Arrays_Algorithm_Tensorflow_Vectorization - Fatal编程技术网

Arrays 内存问题:批量构造下三角矩阵(以矢量化方式)

Arrays 内存问题:批量构造下三角矩阵(以矢量化方式),arrays,algorithm,tensorflow,vectorization,Arrays,Algorithm,Tensorflow,Vectorization,以下是我努力实现的目标: 给定一个如下所示的数组: [1 0 0 0 0 0 0 0 0] [1 1 0 0 0 0 0 0 0] [1 1 1 0 0 0 0 0 0] [1 1 1 1 0 0 0 0 0] [1 1 1 1 1 0 0 0 0] [1 1 1 1 1 1 0 0 0] [1 1 1 1 1 1 1 0 0] [1 1 1 1 1 1 1 1 0] [1 1 1 1 1 1 1 1 1] [[1 0 0 0 0 0 0 0 0] [1 1 0 0 0 0 0

以下是我努力实现的目标:

给定一个如下所示的数组:

[1 0 0 0 0 0 0 0 0]
[1 1 0 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]
    [[1 0 0 0 0 0 0 0 0]
    [1 1 0 0 0 0 0 0 0]
    [1 1 1 0 0 0 0 0 0]],

    [[1 1 1 1 0 0 0 0 0]
    [1 1 1 1 1 0 0 0 0]
    [1 1 1 1 1 1 0 0 0]],

    [[1 1 1 1 1 1 1 0 0]
    [1 1 1 1 1 1 1 1 0]
    [1 1 1 1 1 1 1 1 1]]
>>> arr = tf.linalg.LinearOperatorLowerTriangular(tf.ones((3,3,9)))
>>> arr.to_dense()
<tf.Tensor: id=28, shape=(3, 3, 9), dtype=float32, numpy=
array([[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]]], dtype=float32)>
请记住,这是形状[9乘9]的小数组,可以一次性初始化。我要构造的数组的形状为[90000 x 90000],因此无法一次性初始化

将此[9乘9]数组转换为批处理后,看起来如下所示:

[1 0 0 0 0 0 0 0 0]
[1 1 0 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]
    [[1 0 0 0 0 0 0 0 0]
    [1 1 0 0 0 0 0 0 0]
    [1 1 1 0 0 0 0 0 0]],

    [[1 1 1 1 0 0 0 0 0]
    [1 1 1 1 1 0 0 0 0]
    [1 1 1 1 1 1 0 0 0]],

    [[1 1 1 1 1 1 1 0 0]
    [1 1 1 1 1 1 1 1 0]
    [1 1 1 1 1 1 1 1 1]]
>>> arr = tf.linalg.LinearOperatorLowerTriangular(tf.ones((3,3,9)))
>>> arr.to_dense()
<tf.Tensor: id=28, shape=(3, 3, 9), dtype=float32, numpy=
array([[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]]], dtype=float32)>
我可以使用这些单独的切片来执行操作

如何批量初始化[90000 x 90000]的数组,以保持数组中的位置

我试过接线员。这是输出的样子:

[1 0 0 0 0 0 0 0 0]
[1 1 0 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]
    [[1 0 0 0 0 0 0 0 0]
    [1 1 0 0 0 0 0 0 0]
    [1 1 1 0 0 0 0 0 0]],

    [[1 1 1 1 0 0 0 0 0]
    [1 1 1 1 1 0 0 0 0]
    [1 1 1 1 1 1 0 0 0]],

    [[1 1 1 1 1 1 1 0 0]
    [1 1 1 1 1 1 1 1 0]
    [1 1 1 1 1 1 1 1 1]]
>>> arr = tf.linalg.LinearOperatorLowerTriangular(tf.ones((3,3,9)))
>>> arr.to_dense()
<tf.Tensor: id=28, shape=(3, 3, 9), dtype=float32, numpy=
array([[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]],

       [[1., 0., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 0., 0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 0., 0., 0., 0., 0., 0.]]], dtype=float32)>
我使用了
tf.ones()
,在我的情况下,我甚至不能用它初始化90000×90000数组

请提出构建/初始化此类矩阵的有效方法

编辑:

我到底在找什么?一个逻辑,关于如何制作90000×90000大矩阵的块/子矩阵。例如,我可以创建大小为9000 x 90000的10个子矩阵。但是,如何初始化这10个子矩阵,使其看起来像一个下三角矩阵。
我将使用这些子矩阵来执行向量矩阵乘法。一旦我能找到一种给这些子矩阵赋值的方法(当附加在一起时,看起来就像一个下三角矩阵的1),然后在执行向量矩阵乘法后,我可以将所有10个结果矩阵附加到一个中。

我不完全确定这是否是您需要的,但这里有一种方法可以通过TensorFlow中循环中的块来计算类似的内容(这里是2.x,但应该类似于1.x):

将tensorflow导入为tf
@功能
def mult_tril_chunks(向量,num_chunks=None,chunk_size=None):
#函数接受块的数量或每个块的大小
#最后一个块可能有不同的大小
如果num_chunks为None==chunk_size为None:
raise VALUETERROR('必须给出num_块和chunk_大小中的一个且仅一个')
向量=tf。将_转换为_张量(向量)
#根据给定参数计算块数或块大小
s=tf.形状(向量)[0]
如果区块大小不是无:
chunk\u size=tf.dtypes.cast(chunk\u size,s.dtype)
num\u chunks=(s//chunk\u size)+tf.dtypes.cast(s%chunk\u size!=0,s.dtype)
其他:
n=tf.dtypes.cast(num_chunks,s.dtype)
chunk\u size=s//n+tf.dtypes.cast(s%n!=0,s.dtype)
#如果你知道所有的块总是有相同的大小
#您可以改为传递元素\u shape=[chunk\u size]
ta=tf.TensorArray(vector.dtype,size=num\u chunks,element\u shape=[None],
推断(形状=假)
#循环计算
_,ta=tf.while\u循环(
lambda i,ta:i我不太确定你到底想要什么。你想构建一个大三角矩阵的各个部分,比如在一个循环中?你能告诉我你将如何使用这个吗?@jdehesa我已经编辑了这个问题,请看一看。谢谢你抽出时间。