首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在3D数组/矩阵上使用函数创建新3D数组/矩阵的最快方法

在3D数组/矩阵上使用函数创建新3D数组/矩阵的最快方法
EN

Stack Overflow用户
提问于 2018-08-06 00:16:17
回答 3查看 167关注 0票数 1

因此,我已经拥有或想要创建的是一个由不同参数组成的3D数组,然后我可以使用上的一个函数来创建一个新的3D数组(大小相同),并使用函数的结果。基本上我有这样的东西(R代码):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x <- seq(0,1,0.01)
y <- seq(0,1,0.01)
z <- seq(0,100,0.1)

假设我有一个函数,它就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result = x*data_point + y^2 + z^3

原则上,我可以只做三个循环,并将其保存到一个数组中(或类似的东西),但我认为这将花费大量的计算时间,特别是如果必须对几个数据点执行此步骤的话。在这种情况下,这意味着每个数据点大约有10.000.000次计算-我大约有1000次。所以总共大约有100亿次计算。我知道,为了得到这个结果矩阵,无论如何都需要一些时间,但有没有一些步骤可以让我尽可能快地做到这一点,或者循环是最好的方法?我还需要能够返回并说:“我希望数据点5上的x= 0.2,y= 0.2,z= 10”。

R语言的解决方案将是最好的,但如果用Python可以更快地完成,那也同样有效。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-06 07:11:50

最快的方法是使用Numpy的broadcasting (或here).I修改来自@EternusVia的代码,它比他更快的版本快大约14倍。尽可能避免for循环:)

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

# number of parameter values and patients
nx=100;
ny=100;
nz=100;
n_data=100;

# dummy data
x = np.linspace(0,1,nx);
y = np.linspace(1,2,ny);
z = np.linspace(2,3,nz);
data = np.linspace(0,100,n_data);

result2 = np.empty((n_data,nx,ny,nz));

# method 2 from @EternusVia
start = time.time()
y2=np.power(y,2);
z3=np.power(z,3);

for l in range(0,n_data):
    for i in range(0,nx):
        for j in range(0,ny):
            result2[l,i,j,:]=x[i]*data[l]+y2[j]+z3[:]
end = time.time()
print(end-start)

# method 3 using Numpy broadcasting
# expand the dimensions of the array depending on where
# they are in the final array
x_bc = x[np.newaxis, :, np.newaxis, np.newaxis]
y_bc = y[np.newaxis, np.newaxis, :, np.newaxis]
z_bc = z[np.newaxis, np.newaxis, np.newaxis, :]
data_bc = data[:, np.newaxis, np.newaxis, np.newaxis]

start = time.time()

# just write the equation, broadcasting will to the rest
# of the magic and calculate the results element-wise
result3 = x_bc * data_bc + np.power(y_bc, 2) + np.power(z_bc, 3)
end = time.time()
print(end-start)
print(np.array_equal(result2,result3))
票数 2
EN

Stack Overflow用户

发布于 2018-08-06 02:31:39

这里有两种在Python中实现问题的方法;我对这两种方法都进行了计时。在我的机器上为100^4个元素运行第一个方法大约需要2分钟,而第二个方法只需要4秒。

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

# number of parameter values and patients
nx=100;
ny=100;
nz=100;
n_data=100;

# dummy data
x = np.linspace(0,1,nx);
y = np.linspace(1,2,ny);
z = np.linspace(2,3,nz);
data = np.linspace(0,100,n_data);

result1 = np.empty((n_data,nx,ny,nz));
result2 = np.empty((n_data,nx,ny,nz));

# method 1
start = time.time()
y2=np.power(y,2);
z3=np.power(z,3);

for l in range(0,n_data):
    for i in range(0,nx):
        for j in range(0,ny):
            for k in range(0,nz):
                result1[l,i,j,k] = x[i]*data[l]+y2[j]+z3[k]
end = time.time()
print(end-start)

# method 2
start = time.time()
y2=np.power(y,2);
z3=np.power(z,3);

for l in range(0,n_data):
    for i in range(0,nx):
        for j in range(0,ny):
            result2[l,i,j,:]=x[i]*data[l]+y2[j]+z3[:]
end = time.time()
print(end-start)

print(np.array_equal(result1,result2))

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
133.110018015
4.36485505104
True
票数 0
EN

Stack Overflow用户

发布于 2018-08-06 07:34:26

你在找numpy.mgrid吗?

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

x, y, z = np.mgrid[0:1:0.01, 0:1:0.01, 0:100:0.1]
data = np.mgrid[0:100:0.1] # could use np.arange here, but why?

# this will take some time
result = x * data[..., np.newaxis, np.newaxis, np.newaxis] + y**2 + z**3

print(result.shape) # (100, 100, 100, 1000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51699220

复制
相关文章
5 个步骤创建 Solana 代币
在本文中,我们将通过五个步骤引导你创建 Solana 代币。除了深入研究该过程,我们还将推荐更多关于 Solana 区块链和 SPL 代币的信息。现在,如果你想直接跳到创建代币的文档,请查看以下链接:
Tiny熊
2023/01/09
2.9K0
5 个步骤创建 Solana 代币
区块链行业遭供应链攻击,上万加密钱包被“抄底”损失上亿美元
当地时间8月2日晚间,区块链行业遭遇了一次行业重创。据科技媒体TechCrunch报道,若干名攻击者“抄底”了上万个加密钱包,钱包内有价值上亿美元的代币。 据了解遭受攻击的加密钱包包括Phantom、Slope和TrustWallet等。涉及到的币种除了SOL、SPL和其他基于Solana(公链)的代币以外,还有USDC、USDT、BTC、ETH等主流币和稳定币。 区块链浏览器 Solscan称,锁定的四名攻击者共计攻击了大约1.52万个钱包,不过这些钱包之间可能存在重复攻击。Solana Status官方
FB客服
2023/03/30
3740
区块链行业遭供应链攻击,上万加密钱包被“抄底”损失上亿美元
构建你的第一个Solana NFT dApp
在本教程中,我们将建立一个简单的 dApp,让你可以用 Shyft APIs 在 Solana 区块链上创建一个 NFT。在本教程中铸造的 NFT 在你的钱包里是可用的。
Tiny熊
2022/11/07
1K0
构建你的第一个Solana NFT dApp
如何在 Sollet 网络钱包中创建 Solana 钱包
在今天的指南中,我们将告诉您如何在 Sollet 网络钱包中质押 Solana (SOL) 代币。
公众号---人生代码
2021/10/12
3.3K0
如何在 Sollet 网络钱包中创建 Solana 钱包
如何在Solana上铸造一个NFT
Solana 是一个新兴的区块链,旨在解决以太坊的可扩展性问题,这边文章将逐步介绍如何在 Solana 上创建一个 NFT。NFT 是 Non Fungible Token 的缩写,是一种非同质的 Token。当你创建一个 NFT 时,它类似于创建一个ERC20 代币[4];然而,关键的区别是 ERC20 永远只发行一种代币。在本指南中,我们将以编程方式创建 2 个独立的账户,一个账户用于铸造 NFT,另一个账户将接收 NFT。然后编写代码,在 Solana 上完成 NFT 的铸币和发送。如果你在任何时候被卡住了,请随时参考本指南末尾的完整代码。让我们开始铸币吧!
Tiny熊
2022/11/07
2.1K0
如何在Solana上铸造一个NFT
主链钱包开发:区块链主流钱包推荐和使用指南
作为区块链经济体系中最重要的一环,数字钱包是我们大多数人触摸区块链和加密钱银的入口。 钱包具有显示余额、收款、转账、购买NFT等一系列数字付出功用。类似付出宝,主要用于存储数字钱银,区块链技能也有很高的安全保障。 想要进入元宇宙世界,第一步便是要学会科学上网。不能的,赶紧看这篇文章。http://985.so/a7ve's第二步是注册你自己的区块链钱包。 市面上有哪些干流钱包?下面列出了注册方法和运用指南。 一、Metamask Metamask是为以太坊区块链开发的加密钱银钱包。 这也是迄今为止世界上最受欢迎的加密钱包。 首要,科学进入meta mask https://metamask.io/,官网,挑选自己的浏览器,并在浏览器中装置扩展插件。 你能够在浏览器的右上角看到一个小狐狸图标。
vx-longbatuiguang1
2022/06/24
1.6K0
主链钱包开发:区块链主流钱包推荐和使用指南
Move 教程
欢迎来到 Move 教程! 在本教程中,我们将通过开发 Move 代码的一些步骤,包括 Move 模块的设计、实现、单元测试和形式验证。
Tiny熊
2022/11/07
1.7K0
Move 教程
部署Solidity智能合约到Solana
Solana是一个新的区块链,专注于性能。它支持像Ethereum那样的智能合约,他们称之为程序。你可以使用Rust开发[4]这些程序,但现在有一个新的项目,将Solidity编译为Solana程序。换句话说,你现在就可以把你用Solidity写的合约部署到Solana上了。
Tiny熊
2021/12/31
2.2K0
部署Solidity智能合约到Solana
币圈再次受攻击损失400万美元,9000多个钱包被破解
整理 | 彭慧中       责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 近期币圈频频受到黑客攻击,整个加密货币圈都在经历大规模盗币事件。 7 月,Web3 因漏洞、黑客攻击行为造成了近 6500 万美元的损失。 8 月 1 日,跨链互操作性协议 Nomad 跨链桥因 Replica 合约中存在致命错误而遭黑客攻击,1.9 亿美元被洗劫一空。 8 月 3 日,Solana 生态系统被持续攻击,已有 9200 多个钱包被破解,损失超 400 万美元。遭受攻击后,Solana 的原生代币 S
区块链大本营
2022/08/26
4630
币圈再次受攻击损失400万美元,9000多个钱包被破解
【Web3 开发系列教程—创建你的第一个智能合约(2)】部署第一个智能合约
如果你是区块链开发的新手并且不知道从哪里开始,或者你只是想了解如何部署智能合约并与之交互,那么本指南适合你。 我们将介绍使用虚拟钱包 (Metamask)、Solidity、Hardhat 和 Alchemy 在 Goerli 测试网络上创建和部署一个简单的智能合约(如果你还不明白其中的任何含义,请不要担心,我们将 解释一下!)。
前端修罗场
2023/10/07
1.1K0
【Web3 开发系列教程—创建你的第一个智能合约(2)】部署第一个智能合约
[译]构建去中心化智能合约编程货币
[第1部分] 使用Solidity[4] 和 React在以太坊上构建具有社交找回功能的智能合约钱包
Tiny熊
2020/08/10
1.5K0
Web3 全栈指南
也许你刚刚用solidity[4]、rust 编写了一个链上程序,但是如果没有一个很好的前端交互,几乎没有人可以使用它。
Tiny熊
2022/11/07
5K0
Web3 全栈指南
剥开比原看代码13:比原是如何通过/list-balances显示帐户余额的?
Gitee地址:https://gitee.com/BytomBlockchain/bytom
比原链Bytom
2018/09/20
1.7K0
剥开比原看代码13:比原是如何通过/list-balances显示帐户余额的?
[译]基于以太坊和USDC搭建去中心化金融系统
在Coinbase,我们希望可以创建一个开放的金融系统。我们坚信提高金融的自由度可以让世界更美好。去中心化金融,简称DeFi是一个开放,无界限并且可以程序化的金融,是提供金融自由度的一种方式。
Tiny熊
2020/08/10
1.1K0
Golang语言情怀--第92期 区块链技术-SOL币怎么挖矿?SOL币挖矿教程全面介绍
SOL币作为Solana安全设计的一部分,所有费用都将在SOL币中支付并被烧掉,从而减少总供应量,这种通货紧缩的SOL币机制激励了更多的代币持有者参股,从而提高了网络安全性,也让SOL币投资价值展现在大家面前,因此有不少投资者都想购买SOL币。除了可以直接在交易所购买之外,大家还可以通过挖矿获取SOL币,只不过这项操作比较复杂,新手投资者还不清楚SOL币怎么挖矿?下面C18快讯小编就给大家全面介绍一下SOL币挖矿教程。 SOL币挖矿教程全面介绍 我们这里将挖矿分为以下几个步骤: 注册Solana钱包、充值S
李海彬
2022/06/24
2.6K0
Golang语言情怀--第92期 区块链技术-SOL币怎么挖矿?SOL币挖矿教程全面介绍
本地帐户和活动目录帐户
本地帐户Local Accounts存储在本地的服务器上。这些帐户可以在本地服务器上分配权限,但只能在该服务器上分配。默认的本地帐户是内置帐户(如administrator、guest等),在安装Windows时自动创建。Windows安装后,无法删除默认的本地帐户。此外,默认的本地帐户不提供对网络资源的访问。默认的本地帐户用于根据分配给该帐户的权限来管理对本地服务器资源的访问。默认的本地帐户和后期创建的本地帐户都位于“用户”文件夹中。
谢公子
2023/09/01
1.7K0
本地帐户和活动目录帐户
创建并部署ERC20代币
第一个标准由 Fabian Vogelsteller 于 2015 年 11 月以 ethereum request for Comments(ERC)引入,它被自动分配到 GitHub 第 20 个议题,所以叫“ERC20 代币”。目前绝大多数代币都基于 ERC20 标准。ERC20 后来变成了以太坊改进提案 20(EIP-20),但是大部分仍然使用它最初的名字,ERC20。
Tiny熊
2022/04/08
1.4K0
创建并部署ERC20代币
Solana Web3 技术栈 - 开发者指南
在这篇博客中,我们讨论一下 Solana 区块链,以及作为一个开发者如何开始在 Solana 上构建 dapp。写这篇文章时,我们考虑到了新的开发者和初学者,他们对智能合约和 dapps 仅有一点的了解。我们将探讨一些高层次的概念、工具和技术,这些都是 Solana 开发所需要的,最后我们将建立一个小的 dapp。如果这让你感到兴奋,那就加入享受吧!
Tiny熊
2022/11/07
2K0
Solana Web3 技术栈 - 开发者指南
NFT板块第二春——关于提前布局 Solana 正在崛起的 NFT 生态系统你需要知道的一切
看看 Solana NFT 生态系统,它是 NFT 销量仅次于以太坊的第二大区块链。
用户9329036
2022/04/21
8270
NFT板块第二春——关于提前布局 Solana 正在崛起的 NFT 生态系统你需要知道的一切
智能合约开发语言 — Move 与 Rust 的对比(#1)
翻译一篇 Move 与 Solana 上智能合约开发对比的文章, 原文[2] 非常长, 我计划很为两个部分,这篇包含前 4 节, 以下是原文翻译。
Tiny熊
2022/11/07
1.1K0
智能合约开发语言 — Move 与 Rust 的对比(#1)

相似问题

Solana Anchor通过非拥有帐户信息转移SOL

116

将SOL从Phantom Wallet发送到CLI创建的wallet,但未成功

17

我们如何使用Solana Web3 TS/JS库包装和打开SOL?

112

Solana :将Sollet / Phantom Wallet Connect添加到我的网站-步骤?

287

如何通过“@solana/web3.js”和“@solana/sol-钱包-适配器”传输自定义SPL令牌

59
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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