首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从函数创建矩阵

从函数创建矩阵
EN

Stack Overflow用户
提问于 2019-04-26 01:50:37
回答 3查看 589关注 0票数 2

我希望从一个函数创建一个矩阵,这样,如果行索引小于给定的阈值k,则(3,3)矩阵C的值等于1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

k = 3
C = np.fromfunction(lambda i,j: 1 if i < k else 0, (3,3))

但是,这段代码会引发一个错误。

“包含多个元素的数组的真值是不明确的。请使用a.any()或a.all()”,我不太明白为什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-26 09:19:28

fromfunction的代码是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dtype = kwargs.pop('dtype', float)
args = indices(shape, dtype=dtype)
return function(*args, **kwargs)

您可以看到它只调用了一次function --包含了整个indices数组。这不是迭代。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [672]: idx = np.indices((3,3))                                                    
In [673]: idx                                                                        
Out[673]: 
array([[[0, 0, 0],
        [1, 1, 1],
        [2, 2, 2]],

       [[0, 1, 2],
        [0, 1, 2],
        [0, 1, 2]]])

您的lambda需要标量i,j值,而不是三维数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 lambda i,j: 1 if i < k else 0

idx<3是一个三维布尔数组。当在if上下文中使用它时,会出现错误。

如果要将标量函数应用于一组数组,则np.vectorizenp.frompyfunc更好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [677]: np.vectorize(lambda i,j: 1 if i < 2 else 0)(idx[0],idx[1])                 
Out[677]: 
array([[1, 1, 1],
       [1, 1, 1],
       [0, 0, 0]])

然而,它并不比直接迭代方法更快,也比对整个数组进行操作的函数要慢得多。

许多整体数组方法中的一种:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [680]: np.where(np.arange(3)[:,None]<2, np.ones((3,3),int), np.zeros((3,3),int))  
Out[680]: 
array([[1, 1, 1],
       [1, 1, 1],
       [0, 0, 0]])
票数 2
EN

Stack Overflow用户

发布于 2019-04-26 02:37:27

正如@MarkSetchell所建议的,您需要矢量化您的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
k = 3
f = lambda i,j: 1 if i < k else 0

C = np.fromfunction(np.vectorize(f), (3,3))

你得到的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
票数 1
EN

Stack Overflow用户

发布于 2019-04-26 06:05:09

问题是,np.fromfunction不对所有元素进行迭代,它只返回每个维度中的索引。您可以使用np.where()根据这些索引应用条件,根据条件从两个备选方案中进行选择:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np

k = 3
np.fromfunction(lambda i, j: np.where(i < k, 1, 0), (5,3))

这意味着:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1],
       [0, 0, 0],
       [0, 0, 0]])

这样就避免了命名lambda而不会使事物变得太笨重。在我的笔记本电脑上,这种方法比np.vectorize()快20倍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55865031

复制
相关文章
幂矩阵和初等矩阵函数
1. 幂等矩阵 1.1 定义 若矩阵 满足: A2=AA=A\begin{array}{c} \boldsymbol{A}^2 = \boldsymbol{AA} = \boldsymbol{A} \end{array} A2=AA=A​ 则称矩阵 为幂等矩阵。 1.2 性质 函数 猜想 此处以及后面的函数 应该是需要具备一定条件的,我猜可能是需要是要求 能够进行泰勒展开。但我没有找到相关参考文献,有知道的朋友希望能告知一下~ 2. 对合矩阵(幂单矩阵) 2.1 定义
hotarugali
2022/03/11
1K0
C语言创建对称矩阵
今天遇到一个问题创建对称矩阵,本以为很简单,却在创建的时候怎么也创建不出来,然后百度,翻了半天也没翻到。最后还是自己想出来了。
何其不顾四月天
2023/03/10
1.6K0
C语言创建对称矩阵
矩阵转置(函数)
叶茂林
2023/07/28
1860
opencv 矩阵操作函数
简介OpenCV 矩阵类的成员函数可以进行很多基本的矩阵操作内容列表序号函数描述1cv2.phase()计算二维向量的方向2cv2.polarToCart()已知角度和幅度,求出对应的二维向量3cv2.pow()对矩阵内的每个元素求幂4cv2.randu()用均匀分布的随机数填充给定的矩阵5cv2.randn()用正态分布的随机数填充给定的矩阵6cv2.randShuffle()随机打乱矩阵元素7cv2.reduce()通过特定的操作将二维矩阵缩减为向量8cv2.repeat()将一个矩阵的内容复制到另一个
用户10118114
2022/10/18
4140
opencv求逆矩阵函数_c++矩阵
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171663.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/25
8680
从创建进程到进入main函数,发生了什么?
前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的?
CSDN技术头条
2020/11/04
1.4K0
从创建进程到进入main函数,发生了什么?
MATLAB怎么创建矩阵和数组
第一步:首先教给大家如何创建数组,MATLAB创建数组的方法比较简单,我们在MATLAB中输入如下代码:x=[2 4 6 8 10]
狼啸风云
2020/06/28
3.5K0
从几何角度理解矩阵
矩阵变换是线性代数中的主要内容,如何理解它?本文以几何角度,理解线性变换中的矩阵,能帮助学习者对其建立直观音箱。
老齐
2021/10/21
1.3K0
Python矩阵的创建(不使用numpy
此部分是对python List的扩展应用。 在python中定义一个二维数组,
py3study
2020/01/08
3.2K0
sqlserver~创建函数
1.创建标量函数 即返回一个单个值的函数 定义如下 IF OBJECT_ID (N'dbo.ufnGetInventoryStock', N'FN') IS NOT NULL DROP FUNCTION ufnGetInventoryStock; GO CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int) RETURNS int AS -- Returns the stock level for the prod
Vincent-yuan
2020/05/26
2K0
python中矩阵相加函数sum()
假如矩阵A是n*n的矩阵 A.sum()是计算矩阵A的每一个元素之和。 A.sum(axis=0)是计算矩阵每一列元素相加之和。 A.Sum(axis=1)是计算矩阵的每一行元素相加之和。
py3study
2020/01/06
2.7K0
【MATLAB】数据类型 ( 矩阵 | 随机数函数 | 生成矩阵 )
作用 : 生成 标准正态分布的 伪随机数 ; 标准正态分布指的是均值 0 , 方差 1 ;
韩曙亮
2023/03/29
9010
【MATLAB】数据类型 ( 矩阵 | 随机数函数 | 生成矩阵 )
matlab习题 —— 创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第135号元素。
创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第 135 号元素。
繁依Fanyi
2023/05/07
3800
matlab习题 —— 创建 50 行 50 列全零矩阵、全 1 矩阵、单位矩阵、对角矩阵,输出矩阵第135号元素。
igraph软件包创建图和网络(创建邻接矩阵)
igraph 是一个独立的库,底层是 C,上层有 Python 和 R 接口,主要做图和网络方面的计算,附带绘图功能。
学到老
2019/02/14
1.8K0
igraph软件包创建图和网络(创建邻接矩阵)
一、igraph软件包创建图和网络 igraph 是一个独立的库,底层是 C,上层有 Python 和 R 接口,主要做图和网络方面的计算,附带绘图功能。 调试顶点的大小(参数vertex.size)和顶点标签(参数vertex.label.cex)的大小。 igraph中图的数据结构 igraph中基本的graph structure采用的是EdgeList,所以在igraph中自然而然的允许multiedge的存在,当然它也提供了Adjancency list(对某些算法,大部分算法接受的参数是ed
学到老
2018/03/19
2.8K0
igraph软件包创建图和网络(创建邻接矩阵)
从原始数据到计数矩阵
根据所用文库制备方法的不同,获得的RNA序列(也称reads或tags)有3'(或5')端起始的转录本(10X Genomics, CEL-seq2, Drop-seq, inDrops)和全长转录本(Smart-seq)之分。
生信技能树jimmy
2020/05/17
1.5K0
创建MySQL从库
我们知道Oracle有DataGuard实时备份数据。能够做主备切换,而MySQL也有自己的一套备库方案。称之为主从复制。
全栈程序员站长
2022/07/10
1.6K0
python numpy--矩阵的通用函数
通用函数(ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看作简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器通用函数的输入是一组标量,输出也是一组标量,它们通常可以对应于基本数学运算,如加、减、乘、除等。
用户7886150
2021/01/08
1.2K0
失真函数、失真矩阵与平均失真
: 描述某个信源在某一试验信道传输下的失真大小, 它对信源和信道进行了统计平均, 是从总体上描述整个系统的失真。
timerring
2023/04/12
6040
失真函数、失真矩阵与平均失真
oracle函数的创建
函数和存储过程有一定的相似之处,函数用于返回特定的数据,当建立函数时,在函数头部就会包含return 字句, 而在函数体内必须包含return语句返回的数据,可以使用create function 来创建函数。
全栈程序员站长
2022/10/03
1.7K0

相似问题

从函数句柄创建矩阵(MATLAB)

25

从函数值高效地创建矩阵

33

从函数创建的矩阵,以及矩阵的连接列向量

215

从矩阵创建布尔矩阵

33

从矩阵/列表创建距离矩阵

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文