jjzjj

python NumPy : how to construct a big diagonal array(matrix) from two small array

coder 2023-08-19 原文

import numpy as np

A = np.array([[1, 2], 
              [3, 4]])    
B = np.array([[5, 6], 
              [7, 8]])

C = np.array([[1, 2, 0, 0],
              [3, 4, 0, 0],
              [0, 0, 5, 6],
              [0, 0, 7, 8]])

我想直接从AB制作C,有什么简单的方法可以构造对角线数组C ?谢谢。

最佳答案

方法 #1: 一种简单的方法是使用 np.bmat -

Z = np.zeros((2,2),dtype=int) # Create off-diagonal zeros array
out = np.asarray(np.bmat([[A, Z], [Z, B]]))

sample 运行-

In [24]: Z = np.zeros((2,2),dtype=int)

In [25]: np.asarray(np.bmat([[A, Z], [Z, B]]))
Out[25]: 
array([[1, 2, 0, 0],
       [3, 4, 0, 0],
       [0, 0, 5, 6],
       [0, 0, 7, 8]])

方法#2:对于数组的通用数量,我们可以使用masking -

def diag_block_mat_boolindex(L):
    shp = L[0].shape
    mask = np.kron(np.eye(len(L)), np.ones(shp))==1
    out = np.zeros(np.asarray(shp)*len(L),dtype=int)
    out[mask] = np.concatenate(L).ravel()
    return out

方法#3:对于通用数量的数组,另一种方法是 multi-dimensional slicing -

def diag_block_mat_slicing(L):
    shp = L[0].shape
    N = len(L)
    r = range(N)
    out = np.zeros((N,shp[0],N,shp[1]),dtype=int)
    out[r,:,r,:] = L
    return out.reshape(np.asarray(shp)*N)

样本运行-

In [137]: A = np.array([[1, 2], 
     ...:               [3, 4]])    
     ...: B = np.array([[5, 6], 
     ...:               [7, 8]])
     ...: C = np.array([[11, 12], 
     ...:               [13, 14]])  
     ...: D = np.array([[15, 16], 
     ...:               [17, 18]])
     ...: 

In [138]: diag_block_mat_boolindex((A,B,C,D))
Out[138]: 
array([[ 1,  2,  0,  0,  0,  0,  0,  0],
       [ 3,  4,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  5,  6,  0,  0,  0,  0],
       [ 0,  0,  7,  8,  0,  0,  0,  0],
       [ 0,  0,  0,  0, 11, 12,  0,  0],
       [ 0,  0,  0,  0, 13, 14,  0,  0],
       [ 0,  0,  0,  0,  0,  0, 15, 16],
       [ 0,  0,  0,  0,  0,  0, 17, 18]])

In [139]: diag_block_mat_slicing((A,B,C,D))
Out[139]: 
array([[ 1,  2,  0,  0,  0,  0,  0,  0],
       [ 3,  4,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  5,  6,  0,  0,  0,  0],
       [ 0,  0,  7,  8,  0,  0,  0,  0],
       [ 0,  0,  0,  0, 11, 12,  0,  0],
       [ 0,  0,  0,  0, 13, 14,  0,  0],
       [ 0,  0,  0,  0,  0,  0, 15, 16],
       [ 0,  0,  0,  0,  0,  0, 17, 18]])

关于 python NumPy : how to construct a big diagonal array(matrix) from two small array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42154606/

有关python NumPy : how to construct a big diagonal array(matrix) from two small array的更多相关文章

  1. ruby - 如何修改矩阵(Ruby std-lib Matrix 类)? - 2

    我理解RubystdlibMatrix是不可修改的,也就是说,例如。m=Matrix.zero(3,4)不会写m[0,1]=7但我非常想做...我可以用笨拙的编程来做,比如defmodify_value_in_a_matrix(matrix,row,col,newval)ary=(0...m.row_size).map{|i|m.rowi}.map(&:to_a)ary[row][col]=newvalMatrix[*ary]end...或者作弊,比如Matrix.send:[]=,0,1,7但我想知道,这一定是人们一直遇到的问题。有没有一些标准的、习惯的方法可以做到这一点,而不必使用

  2. 机器学习之混淆矩阵 confusion_matrix - 2

    1.这里介绍由 sklearn.metrics.ConfusionMatrixDisplay 所给出的关于混淆矩阵的一个小例子,来进行理解混淆矩阵及如何应用混淆矩阵来对数据进行分析2.先了解混淆矩阵的一些基本信息,这里规定正类为1,负类为0TP(TruePositives):预测为1,而真实的也为1(即正类判断为正类,1判断为1)TN(TrueNegatives):预测为0,真实的也为0  (即负类判断为负类,0判断为0)FP(FalsePositives):预测为1,真实的为0    (即负类判断为正类,将0判断为了1)FN(FalseNegatives):预测为0,真实为1    (即正类

  3. javascript - 如何包含 gl-matrix? - 2

    我做了什么:从这里下载主分支:https://github.com/toji/gl-matrix将src文件夹放入我的项目文件夹中。从那里包括gl-matrix-manifest.js。试过这个:varmvMatrix=mat4.create();结果:varmvMatrix=mat4.create();ReferenceError:mat4isnotdefined好吧,我们直接引入mat4。包括。结果:varout=newGLMAT_ARRAY_TYPE(16);ReferenceError:GLMAT_ARRAY_TYPEisnotdefined好吧,也许它需要common.js:

  4. javascript - Duration_in_traffic 小于 google Distance Matrix API 中的持续时间 - 2

    我正在通过DistanceMatrixAPI使用“duration_in_traffic”和“duration”功能。对于给定的坐标对,我看到以下结果:{"destination_addresses":["Hamburg,Germany"],"origin_addresses":["85748Garching,Germany"],"rows":[{"elements":[{"distance":{"text":"761km","value":760831},"duration":{"text":"7hours1min","value":25242},"duration_in_traff

  5. javascript - WebGL 使用 gl-matrix 库 mat4.translate 未运行 - 2

    我有这段代码:functionsetupWebGL(){gl.clearColor(0.1,0.5,0.1,1.0);gl.clear(gl.COLOR_BUFFER_BIT);gl.viewport(0,0,400,300);mat4.perspective(45,400/300,0.1,100.0,pMatrix);mat4.identity(mvMatrix);mat4.translate(mvMatrix,[0,0,-2.0]);}除了最后一行,代码中的所有内容都运行mat4.translate(mvMatrix,[0,0,-2.0]);我知道这一点是因为我在每一行之后都放置了

  6. matrix - 如何在 golang 中找到 (2,3 或者如果可能的话 n) 维 slice 的维度并验证它是否是矩阵? - 2

    例如:[][]float64{{11,5,14,1},{11,5,14,1}}具有维度[2,4]。如果将其传递给函数,那么在这里找到维度的最有效方法是什么?谢谢 最佳答案 外部维度只是len(x),其中x是您传递给函数的slice的slice(您的示例[][]float64{{11,5,14,1},{11,5,14,1}})。但是,不能保证内部尺寸相等,因此您必须遍历每个元素并检查它们的len值。如果你保证x的每个元素都有相同数量的元素,只要找到len(x[0])iflen(x)>0。

  7. 2. 矩阵(matrix)、数组、列表(list)、数据框(data.frame.....) - 2

    b站课程视频链接:https://www.bilibili.com/video/BV19x411X7C6?p=1腾讯课堂(最新,但是要花钱,我花99元😢😢买了,感觉不错):https://ke.qq.com/course/3707827#term_id=103855009 本笔记前面的笔记参照b站视频,后面的笔记参考了付费视频笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容,以及补充了个人理解系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_11393896.html文章目录1.矩阵(1)创建矩阵(2)给矩阵的

  8. 使用 Web Matrix 助手的 C# JSON 解码 - 2

    我一直在寻找一种将JSON对象转换为动态对象的简洁方法。(我可以转换为一个对象,但TwitterStreamingAPI实际上发送了两个不同的JSON对象,并且有可能是future的对象类型!)我目前使用的代码来自:DeserializeJSONintoC#dynamicobject?但这不是最干净的代码,我在玩WebMatrix时注意到它们有一个很好的JSON.Decode(string)和JSON.Encode(object)方法,我想利用它们。http://msdn.microsoft.com/en-us/library/system.web.helpers.json(v=vs.

  9. 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment) - 2

  10. javascript - Google Distance Matrix 服务的替代方案? - 2

    我正在研究一个报价计算器,它将根据不同地点之间的里程(以及其他条件)生成报价。直到两天前,我还计划使用Google的DistanceMatrix服务,直到我发现:DisplayofaGoogleMapUseoftheDistanceMatrixservicemustrelatetothedisplayofinformationonaGoogleMap;forexample,todetermineorigin-destinationpairsthatfallwithinaspecificdrivingtimefromoneanother,beforerequestinganddispla

随机推荐