pandas 如何制作一个10的下三角形数组,但在对角线上重复n次?

lf3rwulv  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(118)

我试图为我拥有的每一项创建一个10的数组,但随后将这些10的数组对角地放入一个更大的数组中,用零填充缺失的空格。
下面是一个我正在寻找的例子,但只有3个数组。

import numpy as np
arr = np.tri(3,3)
arr

这将创建一个如下所示的数组:

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

但是我需要一个10 * n的数组,看起来像这样:(此处以数组a 3为例,n = 2)
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
任何帮助将不胜感激,谢谢!
我也试过

df_arr2 = pd.concat([df_arr] * (n), ignore_index=True)
df_arr3 = pd.concat([df_arr2] *(n), axis=1, ignore_index=True)

但这会在所有行和列上重复矩阵,而我只想要对角的。

eoxn13cs

eoxn13cs1#

我看过@brandt的解决方案,这绝对是最好的。如果你想手动构建它们,你可以使用以下方法:

def custom_triangle_matrix(rows, rowlen, tsize):
    cm = []
    for i in range(rows):
        row = []
        for j in range(min((i//tsize)*tsize, rowlen)):
            row.append(0)

        for j in range((i//tsize)*tsize, min(((i//tsize)*tsize) + i%tsize + 1, rowlen)):
            row.append(1)

        for j in range(((i//tsize)*tsize) + i%tsize + 1, rowlen):
            row.append(0)

        cm.append(row)

    return cm

以下是一些示例执行以及使用ppprint时的情况:
第一个
祝您好运!

ia2d9nvy

ia2d9nvy2#

现在我明白了... AFAIU,OP想要那些np.tri三角形在一个更大的,倍数的3方形数组的对角线上。
例如,对于n=2

import numpy as np

n = 2

tri = np.tri(3)

arr = np.zeros((n*3, n*3))

for i in range(0, n*3, 3):
    arr[i:i+3,i:i+3] = tri

arr.astype(int)

# Out: 
# array([[1, 0, 0, 0, 0, 0],
#        [1, 1, 0, 0, 0, 0],
#        [1, 1, 1, 0, 0, 0],
#        [0, 0, 0, 1, 0, 0],
#        [0, 0, 0, 1, 1, 0],
#        [0, 0, 0, 1, 1, 1]])

相关问题